{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "Iy9XsmKeUCwH"
      },
      "outputs": [],
      "source": [
        "from urllib import request\n",
        "import pandas as pd\n",
        "import logging\n",
        "import torch\n",
        "import numpy as np\n",
        "from collections import Counter\n",
        "from ast import literal_eval\n",
        "\n",
        "from spacy.tokenizer import Tokenizer\n",
        "from spacy.lang.en import English\n",
        "import matplotlib.pyplot as plt\n",
        "%matplotlib inline\n",
        "plt.style.use('ggplot')\n",
        "nlp = English()\n",
        "# Create a blank Tokenizer with just the English vocab\n",
        "tokenizer = Tokenizer(nlp.vocab)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "k7lnjFxeTFYJ"
      },
      "outputs": [],
      "source": [
        "# module_url = f\"https://raw.githubusercontent.com/Perez-AlmendrosC/dontpatronizeme/master/semeval-2022/dont_patronize_me.py\"\n",
        "# module_name = module_url.split('/')[-1]\n",
        "# print(f'Fetching {module_url}')\n",
        "# #with open(\"file_1.txt\") as f1, open(\"file_2.txt\") as f2\n",
        "# with request.urlopen(module_url) as f, open(module_name,'w') as outf:\n",
        "#   a = f.read()\n",
        "#   outf.write(a.decode('utf-8'))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 235
        },
        "id": "mWOuodoTUEWy",
        "outputId": "6ed916ba-b73f-4f60-dc4a-0bb9c0cd63c3"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>par_id</th>\n",
              "      <th>art_id</th>\n",
              "      <th>keyword</th>\n",
              "      <th>country</th>\n",
              "      <th>text</th>\n",
              "      <th>label</th>\n",
              "      <th>orig_label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>4341</td>\n",
              "      <td>@@17139403</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>gb</td>\n",
              "      <td>The scheme saw an estimated 150,000 children f...</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>4136</td>\n",
              "      <td>@@22273328</td>\n",
              "      <td>homeless</td>\n",
              "      <td>za</td>\n",
              "      <td>Durban 's homeless communities reconciliation ...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>10352</td>\n",
              "      <td>@@21102155</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>lk</td>\n",
              "      <td>The next immediate problem that cropped up was...</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>8279</td>\n",
              "      <td>@@21220476</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>nz</td>\n",
              "      <td>Far more important than the implications for t...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1164</td>\n",
              "      <td>@@14727121</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>gh</td>\n",
              "      <td>To strengthen child-sensitive social protectio...</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2063</th>\n",
              "      <td>5149</td>\n",
              "      <td>@@1789214</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>gh</td>\n",
              "      <td>the dean of st peter cathedral the very rev se...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2064</th>\n",
              "      <td>5149</td>\n",
              "      <td>@@1789214</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>gh</td>\n",
              "      <td>the dean of st peter's cathedral the rev seth ...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2065</th>\n",
              "      <td>5149</td>\n",
              "      <td>@@1789214</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>gh</td>\n",
              "      <td>preaching the sermon the dean of st peter cath...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2066</th>\n",
              "      <td>5149</td>\n",
              "      <td>@@1789214</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>gh</td>\n",
              "      <td>in his sermon the dean of st peter's cathedral...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2067</th>\n",
              "      <td>5149</td>\n",
              "      <td>@@1789214</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>gh</td>\n",
              "      <td>preaching the sermon the dean of st peter's ca...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>10443 rows × 7 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "     par_id      art_id        keyword country  \\\n",
              "0      4341  @@17139403  poor-families      gb   \n",
              "1      4136  @@22273328       homeless      za   \n",
              "2     10352  @@21102155  poor-families      lk   \n",
              "3      8279  @@21220476     vulnerable      nz   \n",
              "4      1164  @@14727121  poor-families      gh   \n",
              "...     ...         ...            ...     ...   \n",
              "2063   5149   @@1789214     vulnerable      gh   \n",
              "2064   5149   @@1789214     vulnerable      gh   \n",
              "2065   5149   @@1789214     vulnerable      gh   \n",
              "2066   5149   @@1789214     vulnerable      gh   \n",
              "2067   5149   @@1789214     vulnerable      gh   \n",
              "\n",
              "                                                   text  label orig_label  \n",
              "0     The scheme saw an estimated 150,000 children f...      1          4  \n",
              "1     Durban 's homeless communities reconciliation ...      1          2  \n",
              "2     The next immediate problem that cropped up was...      1          4  \n",
              "3     Far more important than the implications for t...      1          2  \n",
              "4     To strengthen child-sensitive social protectio...      1          4  \n",
              "...                                                 ...    ...        ...  \n",
              "2063  the dean of st peter cathedral the very rev se...      1          2  \n",
              "2064  the dean of st peter's cathedral the rev seth ...      1          2  \n",
              "2065  preaching the sermon the dean of st peter cath...      1          2  \n",
              "2066  in his sermon the dean of st peter's cathedral...      1          2  \n",
              "2067  preaching the sermon the dean of st peter's ca...      1          2  \n",
              "\n",
              "[10443 rows x 7 columns]"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from dont_patronize_me import DontPatronizeMe\n",
        "\n",
        "# trids = pd.read_csv('train_semeval_parids-labels.csv')\n",
        "# teids = pd.read_csv('dev_semeval_parids-labels.csv')\n",
        "# trids.par_id = trids.par_id.astype(str)\n",
        "# teids.par_id = teids.par_id.astype(str)\n",
        "\n",
        "dpm = DontPatronizeMe('data', '.')\n",
        "dpm.load_task1(\"train.tsv\")\n",
        "data = dpm.train_task1_df\n",
        "aug = DontPatronizeMe('data', '')\n",
        "aug.load_task1(file_name=\"augment_positive_paraphrase.tsv\")\n",
        "augments = aug.train_task1_df\n",
        "data = pd.concat([data, augments])\n",
        "\n",
        "# rows = [] # will contain par_id, label and text\n",
        "# for idx in range(len(teids)):  \n",
        "#   parid = trids.par_id[idx]\n",
        "#   #print(parid)\n",
        "#   # select row from original dataset to retrieve `text` and binary label\n",
        "#   artid = dpm.train_task1_df.loc[dpm.train_task1_df.par_id == parid].art_id.values[0]\n",
        "#   keyword = dpm.train_task1_df.loc[dpm.train_task1_df.par_id == parid].keyword.values[0]\n",
        "#   country = dpm.train_task1_df.loc[dpm.train_task1_df.par_id == parid].country.values[0]\n",
        "#   text = dpm.train_task1_df.loc[dpm.train_task1_df.par_id == parid].text.values[0]\n",
        "#   label = dpm.train_task1_df.loc[dpm.train_task1_df.par_id == parid].label.values[0]\n",
        "#   origlabel = dpm.train_task1_df.loc[dpm.train_task1_df.par_id == parid].orig_label.values[0]\n",
        "#   rows.append({\n",
        "#       'par_id':parid,\n",
        "#       'art_id': artid,\n",
        "#       'keyword': keyword,\n",
        "#       'country': country,\n",
        "#       'text':text,\n",
        "#       'label':label,\n",
        "#       'orig_label': origlabel,\n",
        "#   })\n",
        "# data = pd.DataFrame(rows)\n",
        "data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "xijOai37Wac8",
        "outputId": "5e3e9d84-5bda-44c5-aba7-10c2e0df1985"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "({'disabled',\n",
              "  'homeless',\n",
              "  'hopeless',\n",
              "  'immigrant',\n",
              "  'in-need',\n",
              "  'migrant',\n",
              "  'poor-families',\n",
              "  'refugee',\n",
              "  'vulnerable',\n",
              "  'women'},\n",
              " {'au',\n",
              "  'bd',\n",
              "  'ca',\n",
              "  'gb',\n",
              "  'gh',\n",
              "  'hk',\n",
              "  'ie',\n",
              "  'in',\n",
              "  'jm',\n",
              "  'ke',\n",
              "  'lk',\n",
              "  'my',\n",
              "  'ng',\n",
              "  'nz',\n",
              "  'ph',\n",
              "  'pk',\n",
              "  'sg',\n",
              "  'tz',\n",
              "  'us',\n",
              "  'za'})"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "keywords = set(data.keyword.to_list())\n",
        "countries = set(data.country.to_list())\n",
        "keywords, countries"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "08lgLdZMGLHx",
        "outputId": "fd0c0372-c3e4-48cb-fc0e-76841b727f7d"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "38.0\n"
          ]
        }
      ],
      "source": [
        "texts = data['text'].astype(str).values.tolist()\n",
        "texts_tokened = [snt.split() for snt in texts]\n",
        "texts_len = [len(snt) for snt in texts_tokened]\n",
        "print(np.percentile(texts_len, 45))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 289
        },
        "id": "Vlgr3AduiCOe",
        "outputId": "ba27a5e7-a2ee-4a91-a397-90f931408177"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# data to plot\n",
        "l_keywords = list(keywords)\n",
        "n_groups = len(l_keywords)\n",
        "# {'disabled', 'vulnerable', 'poor-families', 'refugee', 'homeless', 'in-need', 'immigrant', 'migrant', 'hopeless', 'women'}\n",
        "baseline = [0.4444, 0.5600, 0.5106, 0.5333, 0.4554, 0.7174, 0.4000, 0.5000, 0.3764, 0.5455]\n",
        "finetune = [0.5517, 0.6667, 0.5556, 0.5556, 0.6176, 0.7532, 0.5000, 0.6667, 0.5500, 0.4828]\n",
        "prompt   = [0.5000, 0.6818, 0.5455, 0.5000, 0.6269, 0.7568, 0.6000, 0.5000, 0.5882, 0.4545]\n",
        "\n",
        "# create plot\n",
        "fig, ax = plt.subplots()\n",
        "index = np.arange(n_groups)\n",
        "bar_width = 0.25\n",
        "\n",
        "rects1 = plt.bar(index, baseline, bar_width, label='baseline')\n",
        "rects2 = plt.bar(index + bar_width, finetune, bar_width, label='fine-tune')\n",
        "rects3 = plt.bar(index + 2 * bar_width, prompt, bar_width, label='prompt-tune')\n",
        "\n",
        "plt.xlabel('Keywords')\n",
        "plt.ylabel('F1 scores')\n",
        "plt.xticks(index + bar_width, l_keywords, rotation=45)\n",
        "# plt.legend(loc=1)\n",
        "plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15),\n",
        "          fancybox=False, shadow=False, ncol=5)\n",
        "\n",
        "plt.tight_layout()\n",
        "plt.savefig(\"keywords.pdf\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 297
        },
        "id": "SeEhr7gbkEkH",
        "outputId": "7901ca40-e062-4f16-92a0-83f4214255b6"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# data to plot\n",
        "n_groups = len(countries)\n",
        "#         {'ng, bd, us, za, ke, ph, in, lk, ie, jm, hk, au, sg, pk, tz, my, gh, nz, ca, gb'}\n",
        "baseline = [0.6315, 0.3810, 0.4444, 0.3784, 0.6111, 0.5263, 0.3750, 0.6667, 0.64, 0.5625, 0.6, 0.3529, 0.3529, 0.4242, 0.5217, 0.5185, 0.6207, 0.5, 0.5556, 0.4615]\n",
        "finetune = [0.7058823529411765, 0.3, 0.608695652173913, 0.7407407407407406, 0.6486486486486487, 0.5714285714285715, 0.588235294117647, 0.5925925925925926, 0.6956521739130435, 0.5925925925925927, 0.6666666666666666, 0.37499999999999994, 0.6666666666666666, 0.4444444444444444, 0.5454545454545454, 0.6666666666666667, 0.7272727272727272, 0.5714285714285715, 0.6666666666666665, 0.6363636363636364]\n",
        "promtp   = [0.7272727272727272, 0.2857142857142857, 0.5555555555555556, 0.5833333333333334, 0.7058823529411765, 0.606060606060606, 0.375, 0.6666666666666666, 0.7272727272727272, 0.5714285714285714, 0.6250000000000001, 0.3076923076923077, 0.8571428571428571, 0.48484848484848486, 0.6, 0.7000000000000001, 0.6363636363636365, 0.5217391304347826, 0.75, 0.6666666666666666]\n",
        "\n",
        "# create plot\n",
        "fig, ax = plt.subplots()\n",
        "index = np.arange(n_groups)\n",
        "bar_width = 0.25\n",
        "\n",
        "rects1 = plt.bar(index, baseline, bar_width, label='baseline')\n",
        "rects2 = plt.bar(index + bar_width, finetune, bar_width, label='fine-tune')\n",
        "rects3 = plt.bar(index + 2 * bar_width, promtp, bar_width, label='prompt-tune')\n",
        "\n",
        "plt.xlabel('Countries')\n",
        "plt.ylabel('F1 scores')\n",
        "plt.xticks(index + bar_width, countries, rotation=0)\n",
        "plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.12),\n",
        "          fancybox=False, shadow=False, ncol=5)\n",
        "\n",
        "plt.tight_layout()\n",
        "plt.savefig(\"countries.pdf\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MbN7rFcNhQf5"
      },
      "source": [
        "# Class Distribution"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "T_x-EDbRVoX6",
        "outputId": "d2aeac67-fdcb-46b2-8cb1-1136d3905a6d"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[6825, 756, 466, 1384, 1012]"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "[len(data[data.orig_label==l]) for l in \"01234\"]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "yP2MN1gmWEWk",
        "outputId": "32e8b038-80da-459c-cb6a-efcf2b204948"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(2862, 7581)"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "len(data[data.label==1]), len(data[data.label==0])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "v6pbmUtYT3xh"
      },
      "source": [
        "# Create dictionary"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 299
        },
        "id": "BPCDM2f4UBxU",
        "outputId": "0e092c7b-e1b9-467f-934a-b6836ccc9993"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Text(0, 0.5, 'Frequency')"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEJCAYAAACDscAcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAopUlEQVR4nO3de3QUdZrG8W93LkAMJOlOIHJxMEJ2REXQIBIForSuK66LDKA4qKAIGBXF2wF1nZll0LgYwl1cZLjI7ijLSkads14CQhxQCYSggggIuGgCTbqbkAAht9o/GCtEbl0hSSfdz+ccz0lVd1W/9Z4+PtSvqutnMwzDQERExE/2QBcgIiIti4JDREQsUXCIiIglCg4REbFEwSEiIpYoOERExJLwQBfQVAoLCy1vEx8fT3FxcSNU0/KoF3WpH7XUi1rB1IuOHTue9TWdcYiIiCUKDhERsUTBISIilig4RETEEgWHiIhYouAQERFLFBwiImKJgkNERCxRcIiIiCUh88vxxlT98J3m32EL3wtgJSIijU9nHCIiYomCQ0RELGmSoari4mLmzZvH4cOHsdlsuFwubr/9dsrKysjKyuLQoUMkJCQwadIkoqOjMQyDxYsXs2XLFlq1akV6ejpJSUkArF27lnfffReAoUOHkpaW1hSHICIif9ckwREWFsZ9991HUlISx48fZ/LkyfTs2ZO1a9dy1VVXMWTIELKzs8nOzmbUqFFs2bKFAwcOMHv2bHbt2sWbb77Jyy+/TFlZGStXriQjIwOAyZMnk5KSQnR0dFMchoiI0ERDVXFxceYZQ5s2bejUqRNer5e8vDwGDhwIwMCBA8nLywNg06ZNDBgwAJvNRnJyMkePHsXn81FQUEDPnj2Jjo4mOjqanj17UlBQ0BSHICIif9fkd1W53W727t1Lt27dKCkpIS4uDoDY2FhKSkoA8Hq9xMfHm9s4nU68Xi9erxen02mudzgceL3eM35OTk4OOTk5AGRkZNTZn7/Cw8P92u7gKX/X53NaAn97ESrUj1rqRa1Q6UWTBkd5eTmZmZmMHj2aqKioOq/ZbDZsNluDfZbL5cLlcpnL9ZlcpT6TsgTLJC6/FEwT1DQE9aOWelErmHrRLCZyqqqqIjMzk/79+9O3b18AYmJi8Pl8APh8Ptq1awecPJM4tfkejweHw4HD4cDj8ZjrvV4vDoejqQ5BRERoouAwDIMFCxbQqVMn7rjjDnN9SkoK69atA2DdunX06dPHXJ+bm4thGOzcuZOoqCji4uLo1asXW7dupaysjLKyMrZu3UqvXr2a4hBEROTvmmSo6rvvviM3N5dLLrmEZ599FoCRI0cyZMgQsrKyWLNmjXk7LkDv3r3Jz89n4sSJREZGkp6eDkB0dDS/+c1vmDJlCgDDhg3THVUiIk3MZhiGEegimkJhYaHlbfwdrwyFR44E09htQ1A/aqkXtYKpF83iGoeIiAQHBYeIiFii4BAREUsUHCIiYomCQ0RELFFwiIiIJQoOERGxRMEhIiKWKDhERMQSBYeIiFii4BAREUsUHCIiYomCQ0RELFFwiIiIJU0+53iwC4VHrItIaNMZh4iIWNIkZxzz588nPz+fmJgYMjMzAcjKyjInVzp27BhRUVFMnz4dt9vNpEmTzElEunfvzrhx4wDYs2cP8+bNo6Kigt69ezNmzBhsNltTHIKIiPxdkwRHWloat912G/PmzTPX/TxNLMCyZcuIiooylxMTE5k+ffpp+1m4cCHjx4+ne/fuvPLKKxQUFNC7d+/GLV5EROpokqGqHj16nHVucMMw+Pzzz7nhhhvOuQ+fz8fx48dJTk7GZrMxYMAA8vLyGqNcERE5h4BfHP/222+JiYnh4osvNte53W6ee+452rRpwz333MPll1+O1+vF6XSa73E6nXi93rPuNycnh5ycHAAyMjKIj4+3XFt4eLhf2x08y/r6fGZz5W8vQoX6UUu9qBUqvQh4cKxfv77O2UZcXBzz58+nbdu27Nmzh+nTp5vXRaxwuVy4XC5zuT4TyF/oxPPBMmk9XHgvgo36UUu9qBVMvfj5OvOZBPSuqurqajZu3Ehqaqq5LiIigrZt2wKQlJREhw4dKCoqwuFw4PF4zPd5PB4cDkeT1ywiEuoCGhxff/01HTt2rDMEdeTIEWpqagA4ePAgRUVFdOjQgbi4ONq0acPOnTsxDIPc3FxSUlICVbqISMhqkqGqmTNnsn37dkpLS5kwYQIjRozg5ptvPm2YCmD79u2sWLGCsLAw7HY7Dz/8sHlhfezYscyfP5+Kigp69eqlO6pERALAZhiGEegimsLPvxmxwt/xylN/LX6qYPrleDCN3TYE9aOWelErmHrRbK9xiIhIy6PgEBERSxQcIiJiiYJDREQsUXCIiIglCg4REbFEwSEiIpYoOERExBIFh4iIWKLgEBERSxQcIiJiiYJDREQsUXCIiIglAZ8BsKU62xNxRUSCnc44RETEEgWHiIhY0iRDVfPnzyc/P5+YmBgyMzMBWLFiBatXr6Zdu3YAjBw5kmuuuQaAVatWsWbNGux2O2PGjKFXr14AFBQUsHjxYmpqahg0aBBDhgxpivJFROQUTRIcaWlp3HbbbcybN6/O+sGDB3PnnXWvFfz4449s2LCBGTNm4PP5mDp1KrNmzQJg0aJFvPjiizidTqZMmUJKSgqdO3duikMQEZG/a5Lg6NGjB26326/35uXlkZqaSkREBO3btycxMZHdu3cDkJiYSIcOHQBITU0lLy9PwSEi0sQCelfVRx99RG5uLklJSdx///1ER0fj9Xrp3r27+R6Hw4HX6wXA6XSa651OJ7t27TrrvnNycsjJyQEgIyOD+Ph4y/WFh4efdbuDfmxfn89srs7Vi1CkftRSL2qFSi8CFhy33norw4YNA+Cdd95h2bJlpKenN9j+XS4XLpfLXK7PBPIXOvF8sExaDxfei2CjftRSL2oFUy86dux41tcCdldVbGwsdrsdu93OoEGD+P7774GTZxgej8d8n9frxeFwnLbe4/HgcDiavG4RkVAXsODw+Xzm3xs3bqRLly4ApKSksGHDBiorK3G73RQVFdGtWzcuu+wyioqKcLvdVFVVsWHDBlJSUgJVvohIyGqSoaqZM2eyfft2SktLmTBhAiNGjGDbtm3s27cPm81GQkIC48aNA6BLly7069ePp556CrvdzkMPPYTdfjLfHnzwQaZNm0ZNTQ033XSTGTYiItJ0bIZhGIEuoikUFhZa3uZc45X+PHIkbOF7lj+zuQqmsduGoH7UUi9qBVMvmuU1DhERaZkUHCIiYomCQ0RELFFwiIiIJQoOERGxRMEhIiKWKDhERMQSBYeIiFii4BAREUv8Do68vDyqq6sbsxYREWkB/A6OFStWMG7cOBYtWnTOeTBERCS4+f2Qw+nTp7Nv3z4+++wzMjMzadWqFQMGDKB///60b9++MWsUEZFmxNLTcbt27UrXrl0ZNWoUX3/9NW+99RYrVqzg17/+NS6XixtuuMF8kq2IiAQny49VP3DgAJ999hmfffYZNpuNu+++m/j4eD788EO+/PJLnnnmmcaoU0REmgm/g+PDDz/ks88+o6ioiNTUVB577DGSk5PN1/v27cvYsWMbpUgREWk+/A6OgoIC7rjjDlJSUoiIiDjt9VatWulsQ0QkBPgdHD/PyBceXrtJVVUVhmGYQXL11Vefcdv58+eTn59PTEwMmZmZALz11lts3ryZ8PBwOnToQHp6OhdddBFut5tJkyaZk4h0797dnB1wz549zJs3j4qKCnr37s2YMWOw2Wz1O3IREakXv69kT5s2jT179tRZt2fPHqZNm3bebdPS0nj++efrrOvZsyeZmZm89tprXHzxxaxatcp8LTExkenTpzN9+nQzNAAWLlzI+PHjmT17NgcOHKCgoMDf8kVEpIH4HRw//PAD3bt3r7OuW7du/PDDD+fdtkePHkRHR9dZd/XVVxMWFgZAcnIyXq/3nPvw+XwcP36c5ORkbDYbAwYMIC8vz9/yRUSkgfg9VHXRRRdRUlJCbGysua6kpIRWrVpdcBFr1qwhNTXVXHa73Tz33HO0adOGe+65h8svvxyv14vT6TTf43Q6zxk2OTk55OTkAJCRkUF8fLzlusLDw8+63UE/tq/PZzZX5+pFKFI/aqkXtUKlF34HR9++fZk1axZjxoyhQ4cOHDx4kKVLl9KvX78LKuDdd98lLCyM/v37AxAXF8f8+fNp27Yte/bsYfr06eZ1EStcLhcul8tcrs8E8hc68XywTFoPF96LYKN+1FIvagVTL36+znwmfgfHPffcw7Jly3j++eeprKwkMjKStLQ0Ro4cWe/C1q5dy+bNm3nppZfMi9wRERHmxfakpCQ6dOhAUVERDocDj8djbuvxeHA4HPX+bBERqR+/gyMyMpKxY8fy0EMPUVpaStu2bS/ojqaCggL+8pe/8Ic//KHOcNeRI0eIjo7Gbrdz8OBBioqK6NChA9HR0bRp04adO3fSvXt3cnNzue222+r9+U2h+uE7zb/DFr4XwEpERBqOpV+OHzt2jMLCQsrLy+usv/LKK8+53cyZM9m+fTulpaVMmDCBESNGsGrVKqqqqpg6dSpQe9vt9u3bWbFiBWFhYdjtdh5++GHzwvrYsWOZP38+FRUV9OrVi969e1spX0REGoDNMAzDnzeuXbuWRYsW0bp1ayIjI2t3YLMxd+7cRiuwoRQWFlre5lzjlaeeTfijpZ9xBNPYbUNQP2qpF7WCqRcNco3jz3/+M0899ZT+lS8iEuL8/h1HTU3NWX8ZLiIiocPv4PiXf/kX/ud//oeamprGrEdERJo5v4eq/vrXv3L48GHee++9034F/vrrrzd4YSIi0jz5HRyPP/54Y9YhIiIthN/B0aNHj8asQ0REWgi/g6OyspKVK1eyfv16SktLWbp0KVu3bqWoqKjZ/xBPREQajt8Xx5cuXcr+/fuZOHGi+YvxLl268PHHHzdacSIi0vz4fcaxceNGZs+eTevWrc3gcDgc530cuoiIBBe/zzjCw8NPuxX3yJEjtG3btsGLEhGR5svv4Lj++uuZO3cubrcbODmx0qJFi+rMoyEiIsHP7+C49957ad++PU8//TTHjh1j4sSJxMXFMXz48MasT0REmhm/r3GEh4czevRoRo8ebQ5RXchj1UVEpGXyOzgOHqw7Werx48fNvzt06NBwFYmISLPmd3BMnDjxrK+98847DVKMiIg0f34Hxy/D4fDhw/z3f/83l19+eYMXJSIizZelGQBPFRsby+jRo3niiSe48cYbz/v++fPnk5+fT0xMDJmZmQCUlZWRlZXFoUOHSEhIYNKkSURHR2MYBosXL2bLli20atWK9PR0kpKSgJMTSr377rsADB06lLS0tPoegoiI1IPfd1WdSWFhISdOnPDrvWlpaTz//PN11mVnZ3PVVVcxe/ZsrrrqKrKzswHYsmULBw4cYPbs2YwbN44333wTOBk0K1eu5OWXX+bll19m5cqVlJWVXcghiIiIRX6fcbz00kt17qI6ceIE+/fvZ9iwYX5t36NHD/M3ID/Ly8vj97//PQADBw7k97//PaNGjWLTpk0MGDAAm81GcnIyR48exefzsW3bNnr27Gk+1r1nz54UFBT4dcYjIiINw+/guPnmm+sst27dml/96ldcfPHF9f7wkpIS4uLigJNDXyUlJQB4vV7i4+PN9zmdTrxeL16vF6fTaa4/1yNPcnJyyMnJASAjI6PO/vwVHh5+1u0OnnHt2dXn85uTc/UiFKkftdSLWqHSC7+Do7GvJdhstgb9XYjL5cLlcpnL9ZlAviEnnm/pE9g3ZC+CgfpRS72oFUy96Nix41lfq/ddVWdz9913+7tLYmJi8Pl8xMXF4fP5aNeuHXDyTOLU5ns8HhwOBw6Hg+3bt5vrvV6v5gkREWlifl8cLyoqIjs7m2+++YYDBw7wzTffkJ2dTVFRER6Px/zPipSUFNatWwfAunXr6NOnj7k+NzcXwzDYuXMnUVFRxMXF0atXL7Zu3UpZWRllZWVs3bqVXr16WfpMERG5MJZux33iiSe4/vrrzeUvv/ySzz//nPT09PNuO3PmTLZv305paSkTJkxgxIgRDBkyhKysLNasWWPejgvQu3dv8vPzmThxIpGRkeb+o6Oj+c1vfsOUKVMAGDZs2Gnzn4uISOOyGYZh+PPGBx54gMWLF2O3156kVFdX8+CDD7J06dJGK7ChFBYWWt7mXOOV1Q/faWlfYQvfs/z5zUkwjd02BPWjlnpRK5h6ca5rHH4PVSUmJvLhhx/WWffxxx+TmJhY/8pERKTF8XuoasKECbz22mu899575m2wYWFhPP30041Zn4iINDN+B8ell17KrFmz2LVrFz6fj9jYWJKTkwkPr/dTS0REpAWq9yNHevToQVVVFeXl5Q1Zj4iINHN+ny783//9H6+++ioRERF4PB5SU1PZvn0769atM++GEhGR4Of3GcfChQu5++67mTlzpjk81aNHD3bs2NFoxYmISPPjd3D8+OOP9O/fv8661q1bU1FR0eBFiYhI8+V3cCQkJLBnz54663bv3q3bcUVEQozf1zjuvvtuMjIyuOWWW6iqqmLVqlV88sknjB8/vjHrExGRZsbvM45rr72W559/niNHjtCjRw8OHTrEM888w9VXX92Y9YmISDPj1xlHTU0NTzzxBDNmzGDs2LGNXVNQOvURJS398SMiEtr8OuOw2+3Y7XYqKysbux4REWnm/L7Gcfvtt5OVlcVdd92Fw+GoM+lShw4dGqU4ERFpfs4bHIcPHyY2NpY//elPAHz11VenvcffSZ5ERKTlO29wPPHEEyxdutQMh+nTp/Pss882emEiItI8nfcaxy+n6zh16lYREQk95z3jOPVaRkMrLCwkKyvLXHa73YwYMYKjR4+yevVqcw7ykSNHcs011wCwatUq1qxZg91uZ8yYMZo6VkSkiZ03OKqrq/nmm2/M5ZqamjrLAFdeeWW9Prxjx45Mnz7d3O/48eO57rrr+PTTTxk8eDB33ll3lr0ff/yRDRs2MGPGDHw+H1OnTmXWrFl1ZiUUEZHGdd7giImJ4fXXXzeXo6Oj6yzbbDbmzp17wYV8/fXXJCYmkpCQcNb35OXlkZqaSkREBO3btycxMZHdu3eTnJx8wZ/vD6vTxYqIBKPzBse8efOaog7Wr1/PDTfcYC5/9NFH5ObmkpSUxP333090dDRer5fu3bub7/l5JsIzycnJIScnB4CMjAzi4+Mt1xQeHl5nu4OW93Bm9akl0H7Zi1CnftRSL2qFSi+axfR9VVVVbN68mXvvvReAW2+9lWHDhgEnb/VdtmwZ6enplvbpcrlwuVzmcn0mkG+siedb4mT2jdWLlkr9qKVe1AqmXnTs2PGsrzWLiwNbtmzh0ksvJTY2FoDY2Fjz1+qDBg3i+++/B06eYXg8HnM7r9eLw+EIRMkiIiGrWQTHL4epfD6f+ffGjRvp0qULACkpKWzYsIHKykrcbjdFRUV069atyesVEQllAR+qKi8v56uvvmLcuHHmuuXLl7Nv3z5sNhsJCQnma126dKFfv3489dRT2O12HnroId1RJSLSxGzGL3/hF6QKCwstb/PL8cqGuquqJT4dN5jGbhuC+lFLvagVTL1o9tc4RESk5VBwiIiIJQoOERGxRMEhIiKWKDhERMQSBYeIiFii4BAREUsUHCIiYomCQ0RELFFwiIiIJQoOERGxRMEhIiKWBPzpuKHo1IcltsQHHopIaNMZh4iIWKLgEBERSxQcIiJiSbO4xvHoo4/SunVr7HY7YWFhZGRkUFZWRlZWFocOHSIhIYFJkyYRHR2NYRgsXryYLVu20KpVK9LT00lKSgr0IYiIhIxmERwAv/vd72jXrp25nJ2dzVVXXcWQIUPIzs4mOzubUaNGsWXLFg4cOMDs2bPZtWsXb775Ji+//HIAKxcRCS3NdqgqLy+PgQMHAjBw4EDy8vIA2LRpEwMGDMBms5GcnMzRo0fx+XyBLFVEJKQ0mzOOadOmAXDLLbfgcrkoKSkhLi4OgNjYWEpKSgDwer3Ex8eb2zmdTrxer/leERFpXM0iOKZOnYrD4aCkpIQ//vGPp02SbrPZsNlslvaZk5NDTk4OABkZGXXCxl/h4eF1tjtoeQ/nV5+6AuGXvQh16kct9aJWqPSiWQSHw+EAICYmhj59+rB7925iYmLw+XzExcXh8/nM6x8Oh4Pi4mJzW4/HY25/KpfLhcvlMpdP3cZf8fHx9drOisbef0Npil60JOpHLfWiVjD14pf/gD9VwK9xlJeXc/z4cfPvr776iksuuYSUlBTWrVsHwLp16+jTpw8AKSkp5ObmYhgGO3fuJCoqSsNUIiJNKOBnHCUlJbz22msAVFdXc+ONN9KrVy8uu+wysrKyWLNmjXk7LkDv3r3Jz89n4sSJREZGkp6eHsjyRURCjs0wDCPQRTSFwsJCy9v88rTz1GdMNZSW8qyqYDoFbwjqRy31olYw9aJZD1WJiEjLouAQERFLFBwiImJJwC+OhzrNzSEiLY3OOERExBIFh4iIWKLgEBERSxQcIiJiiYJDREQsUXCIiIglCg4REbFEwSEiIpYoOERExBIFh4iIWKLgEBERSxQcIiJiiYJDREQsCejTcYuLi5k3bx6HDx/GZrPhcrm4/fbbWbFiBatXr6Zdu3YAjBw5kmuuuQaAVatWsWbNGux2O2PGjKFXr14BPIKGpSflikhLENDgCAsL47777iMpKYnjx48zefJkevbsCcDgwYO58866U7X++OOPbNiwgRkzZuDz+Zg6dSqzZs3CbteJk4hIUwlocMTFxREXFwdAmzZt6NSpE16v96zvz8vLIzU1lYiICNq3b09iYiK7d+8mOTm50WpsjHnGRURasmYzkZPb7Wbv3r1069aNHTt28NFHH5Gbm0tSUhL3338/0dHReL1eunfvbm7jcDjOGjQ5OTnk5OQAkJGRQXx8vOWawsMD15761NuYwsPDm11NgaR+1FIvaoVKL5pFcJSXl5OZmcno0aOJiori1ltvZdiwYQC88847LFu2jPT0dEv7dLlcuFwuc7m4uNhyXYH8AtSn3sYUHx/f7GoKJPWjlnpRK5h60bFjx7O+FvCLA1VVVWRmZtK/f3/69u0LQGxsLHa7HbvdzqBBg/j++++Bk2cYHo/H3Nbr9eJwOAJSt4hIqApocBiGwYIFC+jUqRN33HGHud7n85l/b9y4kS5dugCQkpLChg0bqKysxO12U1RURLdu3Zq8bhGRUBbQoarvvvuO3NxcLrnkEp599lng5K2369evZ9++fdhsNhISEhg3bhwAXbp0oV+/fjz11FPY7XYeeugh3VElItLEbIZhGIEuoikUFhZa3iY+Pp6Dd6U2QjXWNIffdATT2G1DUD9qqRe1gqkXzfoah4iItCwKDhERsUTBISIilig4RETEEgWHiIhYouAQERFLmsUjR+TczvagxeZwm66IhB6dcYiIiCUKDhERsUTBISIilig4RETEEl0cb8E0R7mIBILOOERExBIFh4iIWKKhqiChYSsRaSoKjiCkEBGRxtQig6OgoIDFixdTU1PDoEGDGDJkSKBLarZ++atzBYmIXKgWFxw1NTUsWrSIF198EafTyZQpU0hJSaFz586BLq1F0NmIiFyoFhccu3fvJjExkQ4dOgCQmppKXl6egqMe9AwsEamPFhccXq8Xp9NpLjudTnbt2nXa+3JycsjJyQEgIyPjnPPnnkuXv26qX6FBqL49DFbqRy31olYo9CJob8d1uVxkZGSQkZFR731Mnjy5AStq2dSLutSPWupFrVDpRYsLDofDgcfjMZc9Hg8OhyOAFYmIhJYWFxyXXXYZRUVFuN1uqqqq2LBhAykpKYEuS0QkZLS4axxhYWE8+OCDTJs2jZqaGm666Sa6dOnSKJ/lcrkaZb8tkXpRl/pRS72oFSq9sBmGYQS6CBERaTla3FCViIgEloJDREQsaXHXOJpKqD3WpLi4mHnz5nH48GFsNhsul4vbb7+dsrIysrKyOHToEAkJCUyaNIno6GgMw2Dx4sVs2bKFVq1akZ6eTlJSUqAPo0HV1NQwefJkHA4HkydPxu12M3PmTEpLS0lKSuLxxx8nPDycyspK5s6dy549e2jbti1PPvkk7du3D3T5Debo0aMsWLCA/fv3Y7PZeOSRR+jYsWNIfi8++OAD1qxZg81mo0uXLqSnp3P48OHQ+14Ycprq6mrjscceMw4cOGBUVlYazzzzjLF///5Al9WovF6v8f333xuGYRjHjh0zJk6caOzfv9946623jFWrVhmGYRirVq0y3nrrLcMwDGPz5s3GtGnTjJqaGuO7774zpkyZEqjSG837779vzJw503jllVcMwzCMzMxM429/+5thGIbxxhtvGB999JFhGIbx4YcfGm+88YZhGIbxt7/9zZgxY0ZgCm4kc+bMMXJycgzDMIzKykqjrKwsJL8XHo/HSE9PN06cOGEYxsnvw6effhqS3wsNVZ3BqY81CQ8PNx9rEszi4uLMfxm2adOGTp064fV6ycvLY+DAgQAMHDjQ7MOmTZsYMGAANpuN5ORkjh49is/nC1j9Dc3j8ZCfn8+gQYMAMAyDbdu2cf311wOQlpZWpxdpaWkAXH/99XzzzTcYQXLPybFjx/j222+5+eabAQgPD+eiiy4K2e9FTU0NFRUVVFdXU1FRQWxsbEh+LzRUdQb+PtYkWLndbvbu3Uu3bt0oKSkhLi4OgNjYWEpKSoCTPYqPjze3cTqdeL1e870t3ZIlSxg1ahTHjx8HoLS0lKioKMLCwoCTP0T1er1A3e9LWFgYUVFRlJaW0q5du8AU34Dcbjft2rVj/vz5/PDDDyQlJTF69OiQ/F44HA7++Z//mUceeYTIyEiuvvpqkpKSQvJ7oTMOqaO8vJzMzExGjx5NVFRUnddsNhs2my1AlTWdzZs3ExMTE1Rj8/VVXV3N3r17ufXWW/n3f/93WrVqRXZ2dp33hMr3oqysjLy8PObNm8cbb7xBeXk5BQUFgS4rIHTGcQah+liTqqoqMjMz6d+/P3379gUgJiYGn89HXFwcPp/P/NeSw+GguLjY3DaYevTdd9+xadMmtmzZQkVFBcePH2fJkiUcO3aM6upqwsLC8Hq95vH+/H1xOp1UV1dz7Ngx2rZtG+CjaBhOpxOn00n37t2Bk0Mu2dnZIfm9+Prrr2nfvr15rH379uW7774Lye+FzjjOIBQfa2IYBgsWLKBTp07ccccd5vqUlBTWrVsHwLp16+jTp4+5Pjc3F8Mw2LlzJ1FRUUExHAFw7733smDBAubNm8eTTz7JlVdeycSJE7niiiv44osvAFi7dq35nbj22mtZu3YtAF988QVXXHFF0PwLPDY2FqfTSWFhIXDyf56dO3cOye9FfHw8u3bt4sSJExiGYfYiFL8X+uX4WeTn57N06VLzsSZDhw4NdEmNaseOHbz00ktccskl5pd75MiRdO/enaysLIqLi0+77XLRokVs3bqVyMhI0tPTueyyywJ8FA1v27ZtvP/++0yePJmDBw8yc+ZMysrKuPTSS3n88ceJiIigoqKCuXPnsnfvXqKjo3nyySfN+WKCwb59+1iwYAFVVVW0b9+e9PR0DMMIye/FihUr2LBhA2FhYXTt2pUJEybg9XpD7nuh4BAREUs0VCUiIpYoOERExBIFh4iIWKLgEBERSxQcIiJiiYJDpAV59NFH+eqrr5r8c91uNyNGjKC6urrJP1uaH/1yXFq0HTt2sHz5cvbv34/dbqdz58488MADdOvW7YL2u3btWlavXs3UqVMbqNKW5dFHH2X8+PH07Nkz0KVIM6TgkBbr2LFjZGRkMHbsWFJTU6mqquLbb78lIiIi0KWJBDUFh7RYRUVFANx4440A5hNLT7VmzRref/99Dh8+TLdu3Rg3bhwJCQkAjBgxgrFjx/LBBx9w5MgRbrzxRh566CF++uknFi5cSFVVFffddx9hYWEsWbKEyspK/vznP/P5559TVVVFnz59GD16NJGRkWzbto05c+YwePBg/vKXv2C32xk5ciQ33XQTABUVFbz99tt88cUXHD16lEsuuYR//dd/JTIykp07d7Js2TJ+/PFHEhISGD16NFdcccV5j7+mpob33nuP1atXc/ToUa688krGjRtHdHQ0brebxx57jPT0dN555x0qKioYPHiw+QSEiooK/uM//oPNmzcTGxtLWloa//u//8uCBQuYM2cOxcXFvPrqq9jtdoYNG0a/fv0A+Oyzz864PwkxgZgERKQhHD161BgzZowxZ84cIz8/3ygtLa3z+saNG43HHnvM2L9/v1FVVWWsXLnSeOGFF8zXhw8fbrzyyitGWVmZcejQIePBBx80tmzZYhiGYXz66afGiy++WGd/ixcvNjIyMozS0lLj2LFjxiuvvGL853/+p2EYhvHNN98Yd999t/H2228blZWVxubNm43f/va3Zk0LFy40fve73xkej8eorq42duzYYVRUVBgej8cYM2aMsXnzZqO6utrYunWrMWbMGKOkpOSMx5yenm5s3brVMAzD+Otf/2o8//zzRnFxsVFRUWG88cYbRlZWlmEYhnHw4EFj+PDhxuuvv26cOHHC2Lt3rzFy5EhzQrLly5cbL730klFaWmoUFxcbTz/9tDF+/Pgzfo4/+5PQoovj0mJFRUXxb//2b9hsNt544w3Gjh3Lq6++yuHDhwH45JNPuOuuu+jcuTNhYWHcdddd7Nu3j0OHDpn7GDJkCBdddBHx8fFcccUV7Nu374yfZRgGq1ev5oEHHiA6Opo2bdowdOhQ1q9fb74nLCyMYcOGER4ezjXXXEPr1q0pLCykpqaGTz/9lNGjR+NwOLDb7fzDP/wDERER5Obm0rt3b6655hrsdjs9e/bksssuIz8//7zH/8knn3DPPffgdDqJiIhg+PDhfPnll3UuYA8fPpzIyEi6du3Kr371K3744QcAPv/8c+666y6io6NxOp380z/9k189P9v+JLRoqEpatM6dO/Poo48C8NNPPzFnzhyWLFnCk08+yaFDh1i8eDHLli0z328YBl6v1xyuio2NNV9r1aoV5eXlZ/ycI0eOcOLECSZPnlxnXzU1NeZy27ZtzQl9Tt1faWkplZWVJCYmnrbf4uJivvjiCzZv3myuq66u9muo6tChQ7z22mt1nrhqt9vNSZXOdXw+n++0CZf84W+/JLgpOCRodOrUibS0ND755BPg5GOwhw4dSv/+/S94323btiUyMpIZM2ZYnl+ibdu2REREcODAAbp27VrnNafTSf/+/ZkwYYLlmpxOJ4888gi//vWvT3vN7Xafc9vY2Fg8Hg+dO3cGqDP/jMj5aKhKWqyffvqJ999/3/yfXnFxMevXrzcnHbrlllvIzs5m//79wMm7sD7//HO/9h0bG4vX66Wqqgo4+S/5QYMGsWTJkjrTpPozA5zdbuemm25i2bJleL1eampq2LlzJ5WVlfTv35/NmzdTUFBgzme9bds2v/5Hfsstt/D222+bQ29Hjhwx57s+n379+pGdnU1ZWRler5cPP/zwtOM/X/hI6NIZh7RYbdq0YdeuXXzwwQccO3aMqKgorr32WkaNGgXAddddR3l5OTNnzqS4uJioqCiuuuoq8w6hc7nyyivp3LkzDz/8MHa7nUWLFvHb3/6WlStX8sILL1BaWorD4eCWW26hV69e593f/fffz3/9138xZcoUysvL6dq1Ky+88ALx8fE899xzLF++nFmzZmG32+nWrRsPP/zwefd5++23A/DHP/4Rn89HTEwM/fr1MydVOpdhw4axcOFCHnvsMeLi4rjxxhvNSYfg5LWfP/3pTyxfvpyhQ4dy/fXXn3efEjo0H4eI8PHHH7N+/Xr+8Ic/BLoUaQE0VCUSgnw+Hzt27KCmpobCwkLef/99rrvuukCXJS2EhqpEQlBVVRULFy7E7XYTFRXFDTfcwD/+4z8GuixpITRUJSIilmioSkRELFFwiIiIJQoOERGxRMEhIiKWKDhERMSS/wdWCHgeyItiFQAAAABJRU5ErkJggg==",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "texts = data['text'].astype(str).values.tolist()\n",
        "texts_tokened = [snt.split() for snt in texts]\n",
        "texts_len = [len(snt) for snt in texts_tokened]\n",
        "plt.hist(texts_len, bins=100)\n",
        "plt.xlabel(\"Sentence length\")\n",
        "plt.ylabel(\"Frequency\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "cn2MIw0jZFwM",
        "outputId": "9c99d400-9df7-4581-c826-52b949d2fa46"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "mean sentence length: 46.34779277985253, max sentence length: 909 (at 7489), min sentence length: 1 (at 2266)\n",
            "122.0\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "(0,\n",
              " '\"Dr Mayengbam Lalit Singh Recently honourable PM of India launched scheme called \"\" Doubling Farmers \\' Income \"\" in order to uplift the welfare being of larger portion of Indians . The big questions felt by people are ( i ) How would it be possible in short period of time ? And ( ii ) is it an elusive doctrine to sweep vote bank of millions of farmers for upcoming parliamentary election in 2019 ? Across all over India ( except for a few states ) so many rigidities have to be solved in order to raise the real income of farmers . These rigidities are characterised by infrastructures , structures and institutions . The present article focuses on those rigidities only for Manipur which has been lagging behind many Indian states . Regarding infrastructure ( inputs ) , the state is found backward among those backward states of India . Introspecting water infrastructure , the state has been under-utilising water resources despite the abundant availability . For Kharif season crops farmers rely on rain water since the state is under the map of SE monsoon . However , during Rabi and Zayed seasons the state has been witnessing scarcity of water . In order to curb this shortage , government needs construction of multiple check dams and digging bore wells in those small streams flowing across the plain areas . During peak season , there is always a shortage of manures and pesticides due to landslide on national highways . Revolution of organic farming will lessen dependency on chemical fertilisers since the state has high potential of producing organic manures and pesticides . During post harvesting period , the state needs to construct cold storages so that perishable crops can be stored for agricultural off seasons . Regarding financial support to farming , banks are not integrated with farmers . Moreover state government does not organise crop insurance schemes in order to compensate the loss due to natural calamity . My previous article on \"\" Channelizing Mahatma Gandhi National Rural Employment Guarantee Act ( MGNREGA ) with Crop and Livestock Insurances in India \"\" postulates the model on how to compensate the loss . The second rigid character of farming is that there had been no structural change over decades . Farming in Manipur focuses on production of only coarse cereals which is characterised by immediate consumption . In this era of globalisation farming should have close introspection of demand and supply model of consumers across the world . Especially in hilly areas , cultivation of coarse cereal is just to meet local consumption and not for earning profits . Nowadays , farmers stated cultivation of illegal crops such as poppy illegally in order to earn huge profit . In order to prevent this , government should emphasise on cultivation cash crops such yongchak ( parkia speciosa ) , cardamom , tea , coffee , black pepper , etc. since these crops are highly demanded in international as well as domestic market . On the other hand this can reduce environmental destruction which is followed after short period zoom cultivation . In plain areas also main crops are also coarse cereals which are vulnerable to low profit . Farmers should diversify in cultivation of cash crops such as black rice , medicinal plants , oil seeds , mushrooms , etc . Moreover farmers should engage themselves in nonfarm sectors wherein both farm and nonfarm sectors can be fitted in supply and demand schedule for their inputs and outputs . One of the institutional rigidities faced by the farmers is asymmetric information on the technological development in agricultural sector . Krishi Vigyan Kendras ( KVKs ) had been instituted in every districts across India in order to fill the information gap between farmers and agricultural scientists . However their works had been found confined to laboratories only and their expertises are hardly in the knowledge domain of farmers . Government should frame policies for KVKs so that they should be available to farmers at least once in a week on alternative blocks . Another institutional rigidity we witness is financial inaccessibility of farmers to existing financial institutions ( banks ) . In India , banks are found to release funds to manufacturing and service sectors but not on agricultural sector . Too much official procedures and rigid financial securities create inaccessibility of farmers to banks . So the banks should be advised to make survey on the constructive environment wherein farmers should accede and return loans in time . Another important institutional rigidity is lack of marketing institutions such as marketing farms and agents which can deal in such agricultural products . Government should invite both local and nonlocal farms which can link farmers with consumers at price determined by market rate . Government also should have policies such as Minimum Support Price and construction of Cold Storages so that various types of agricultural products can be available during their offseason . The last most important institutional rigidities is inability of government to constitute an integral body which comprises above mentioned farmers body , financial institutes , KVKs , Marketing farms and government funded research institutes . If the integral body function with mutual exchange of workings with all institutional constituents , dream of \"\" Doubling Farmers \\' Income \"\" can be achieved . Let this article may draw attention of Agricultural Ministry in fulfilling its ambition .\"')"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "print(f\"mean sentence length: {np.mean(texts_len)}, max sentence length: {np.max(texts_len)} (at {np.argmax(texts_len)}), min sentence length: {np.min(texts_len)} (at {np.argmin(texts_len)})\")\n",
        "print(np.percentile(texts_len, 98))\n",
        "data['label'][np.argmax(texts_len)], data['text'][np.argmax(texts_len)]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "88DemJdYfP5o"
      },
      "outputs": [],
      "source": [
        "def get_dict_with_freq(dataframe):\n",
        "  texts = dataframe['text'].astype(str).values.tolist()\n",
        "  tokens = \" \".join(texts).lower().split()\n",
        "  tokens_size = len(tokens)\n",
        "  counts = Counter(tokens)\n",
        "  print(len(counts), tokens_size)\n",
        "  frequency = {}\n",
        "  for w in counts:\n",
        "    frequency[w] = counts[w] / tokens_size\n",
        "\n",
        "  return frequency\n",
        "  \n",
        "def calculate_keyword_pmi(dataframe):\n",
        "  word_freqs = get_dict_with_freq(dataframe)\n",
        "  samples_num = len(dataframe)\n",
        "\n",
        "  result = {}\n",
        "  for keyword in keywords:\n",
        "    print(keyword)\n",
        "    keyword_df = dataframe[dataframe.keyword == keyword]\n",
        "\n",
        "    # conditional prob\n",
        "    word_keyword_freqs = get_dict_with_freq(keyword_df)\n",
        "\n",
        "    pmis, words = [], []\n",
        "    for word in word_keyword_freqs:\n",
        "      words.append(word)\n",
        "      pmis.append(np.log(word_keyword_freqs[word] / word_freqs[word]))\n",
        "\n",
        "    result[keyword] = (pmis, words)\n",
        "  return result\n",
        "\n",
        "def calculate_country_pmi(dataframe):\n",
        "  word_freqs = get_dict_with_freq(dataframe)\n",
        "  samples_num = len(dataframe)\n",
        "\n",
        "  result = {}\n",
        "  for country in countries:\n",
        "    print(country)\n",
        "    keyword_df = dataframe[dataframe.country == country]\n",
        "\n",
        "    # conditional prob\n",
        "    word_keyword_freqs = get_dict_with_freq(keyword_df)\n",
        "\n",
        "    pmis, words = [], []\n",
        "    for word in word_keyword_freqs:\n",
        "      words.append(word)\n",
        "      pmis.append(np.log(word_keyword_freqs[word] / word_freqs[word]))\n",
        "\n",
        "    result[country] = (pmis, words)\n",
        "  return result"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2veD6DdvUZrx"
      },
      "source": [
        "# Sentence length"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 421
        },
        "id": "LJTUthMyUb3l",
        "outputId": "7a5146c5-a5eb-4b78-da97-3af6d63d7f7b"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "41.5272536687631 48.16765598206042\n",
            "26.31776052957482 29.18188871271734\n"
          ]
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAukklEQVR4nO3deUBVdcL/8fe9gCACsqa5lgtTmWaGue9o86iP26M0lmuZ9aA52lTTMuk0ZFFqambZYpbZlDYp5jTliKZOmoW4lY65pA3mwnIREUW9cH5/8Hh/oCAXucsBPq+/7nLu93zuuZf74Zx77jkWwzAMRERETMbq7QAiIiKlUUGJiIgpqaBERMSUVFAiImJKKigRETElFZSIiJiSr7cDuNLx48cr9fjIyEgyMzNdlMY9qkJGUE5XU07Xqgo5q0JGcE3OBg0alHq71qBERMSUVFAiImJKKigRETGlavUdlIiIuxmGQX5+PoWFhVgsFrfN59SpU1y4cMFt47uKszkNw8BqtRIQEOD0clNBiYhUQH5+Pn5+fvj6uvfj09fXFx8fH7fOwxUqktNut5Ofn0/t2rWdml6b+EREKqCwsNDt5VRd+fr6UlhY6PT0KigRkQpw52a9mqAiy08FJSIipqT1VBGRSih4aJBLx/N553OXjleWpUuXUrt2bUaMGMHy5cvp0aMH9evXB+Dxxx9n4sSJREdHeyRLWTxSUBcvXmTGjBnY7XYKCgro2LEjcXFxLFy4kH379hEYGAjApEmTuOmmmzAMgyVLlrBz5078/f2Jj4+nWbNmnoha4wz+aD8Aq++/xctJRMSTxowZ47j86aefcssttzgKavbs2d6KVYJHCsrPz48ZM2YQEBCA3W5n+vTptG3bFoDRo0fTsWPHEtPv3LmTkydP8tprr3Hw4EHeffddXnzxRU9EFRExvbS0NO6//37atGnDDz/8QHR0NK+99hrbt28nISGBgoIC7rjjDl566SX8/f158cUX+ec//4mvry/du3dn+vTpzJkzhzp16tCoUSN2797N5MmTCQgI4PPPP2f06NE899xz7N69m19++YXnnnsOgOXLl7Nnzx5mzpzJZ599xnvvvcelS5do27YtL730ksv3OvTId1AWi4WAgAAACgoKKCgouOYXZdu3b6d79+5YLBaio6PJy8sjOzvbE1FFRKqEw4cPM3bsWDZt2kRwcDBvvfUW06ZN480332T9+vXY7XaWLl2KzWbjyy+/5OuvvyY5OZnf//73JcYZOHAgd9xxB6+//jrr1q0rsQv4gAED+OqrrxzX16xZw+DBgzl48CCff/45SUlJbNiwAR8fH1auXOny5+ixnSQKCwt54oknmDBhAq1bt6Zly5YAfPzxxzz++OO8//77XLp0CQCbzUZkZKTjsREREdhsNk9FFRExvQYNGtC+fXsAhg0bxjfffEOTJk1o3rw5ACNGjOC7774jJCQEf39//vCHP/CPf/zD6d8gQdFnb5MmTUhNTcVms3Ho0CHat2/PN998ww8//ED//v3p3bs333zzDf/5z39c/hw9tpOE1Wpl1qxZ5OXlMXv2bP7zn/9w3333ERoait1u56233mL16tUMHz7c6TGTk5NJTk4GIDExsUSpXQ9fX99Kj+Fu7sro6jGrwrIE5XS1mpDz1KlTJX4HVeCqUP+n+Nhl/d7Kx8cHq9XquN/Hx4fQ0FCys7NL3HZ569XatWv517/+xZo1a3j//fdZuXIlVqvVMYbFYsHHx8fx2OLXhw4dyhdffEGLFi3o378/fn5+WCwW4uLi+NOf/lTh5+fv7+/0svf4Xnx16tShVatW7Nq1i0GDivZ+8fPzo1evXqxZswaA8PDwEodvz8rKIjw8/KqxYmNjiY2NdVyv7CHfq8Lh7d2V0dVjVoVlCcrpajUh54ULF9x6hAe73Q4UldPly1cqKCjg2LFjbNu2jZiYGD777DNat27NsmXLOHjwIDfffDMrVqygQ4cO5OTkcP78eXr27Em7du3o1KkTdrudwsJCCgsLsdvtBAYGkpOT45ifYRgUFBRgt9vp168f8+bNo0GDBjz77LPY7XY6d+7M+PHjmTBhAvXr1ycjI4O8vDwaNWpU7vO7cOHCVcu+rNNteKSgzpw5g4+PD3Xq1OHixYvs2bOHwYMHk52dTVhYGIZhkJKSQuPGjQGIiYnhq6++okuXLhw8eJDAwEDCwsI8EVVEpEI8tVv4lZo3b84HH3zAH/7wB6Kjo0lISKBdu3Y8/PDDjp0kRo8ezenTp3nggQe4cOEChmEwY8aMq8aKi4vjqaeecuwkUVxoaCgtWrTg4MGD3HnnnQBER0fz5JNPMnLkSAzDwNfXl5kzZzpVUBVhMQzDcOmIpfjll19YuHAhhYWFGIZBp06dGD58OM8//zxnzpwBoGnTpkycOJGAgAAMw2Dx4sXs3r2bWrVqER8f79iuei06YWHFuWs386qwLEE5Xa0m5Dx37pzjpzHudK01qLS0NMaOHcuGDRvcnqM818pZmtKWn1fXoJo2bcorr7xy1e2lNTkUbf+cMGGCu2OJiIiJ6VBHIiJVTOPGjU2x9uRuKqga6PJmvYreJyLiSSooERExJRWUiIiYkgpKRERMSafbEBGpBFd/b2uGMwvk5OSwatUqxo0bB8DJkyd57rnneOeddzyaQ2tQIiJSwpkzZ1i6dKnjev369T1eTqCCEhGpctLS0ujRowdPPPEEvXr1YuTIkZw/f56jR49y//3389vf/pahQ4dy6NAhAI4ePcrAgQPp06cPL7/8suNg3Xl5ecTFxXHPPffQp08f1q5dC8CLL77IL7/8Qt++fUlISCAtLY3evXsDRUc//+mnnxxZhg4dyu7duzl37hyPPfYYAwYMoF+/fo6xKkMFJSJSBR05coSxY8fy9ddfExISwj/+8Q+efPJJEhIS+Oqrr3juued4+umnAZg+fToTJkxg/fr13HjjjY4x/P39Wbx4MWvXruXTTz/lL3/5C4Zh8Mwzz9C0aVPWrVvnOBfUZYMGDXIcN/XUqVOcOnWKO+64g/nz59OlSxe++OILPv30UxISEjh37lylnqO+gxIRqYIaN27M7bffDkCbNm1IS0sjNTWVhx9+2DHNxYsXAUhNTeW9994DitZ4EhISgKKDwiYmJvLdd99hsVg4efIkGRkZ15zvf//3f3Pffffx+OOPs2bNGgYOHAjA5s2bWbduHYsWLQKKDgr766+/OtbWrocKSkSkCvL393dc9vHxISMjg5CQENatW+f0GCtXriQrK4svv/wSPz8/OnTowIULF675mBtvvJGwsDD27dvH559/zqxZs4Cisnv77bdp0aLF9T2hUmgTn4hINRAcHEzjxo0dm98Mw2Dv3r0AtGvXji+++AKA1atXOx6Tm5tLZGQkfn5+bNmyhWPHjgFFp0U6e/ZsmfMaNGgQb775Jrm5ubRq1QqAHj16sGTJEi4ff/zHH3+s9HPSGpSISCWYYbfwy15//XWefvpp5s+fj91uZ/DgwbRq1Yrnn3+eKVOmsGDBAnr27ElISAhQdCbesWPH0qdPH9q0aeNY+wkPD6d9+/b07t2bXr16OXY3v2zAgAFMnz6dqVOnOm6bOnUqM2bMIDY2lsLCQho3blxiT8DroYISEalirjxY7COPPOK4/NFHH101/Y033siaNWuwWCysXr2aw4cPA0VFdHmN60oLFy4scb34/KKioq46xXvt2rVLPWtFZaigRESquT179vDss88CEBISwpw5c7ycyDkqKBGRaq5Dhw4kJyd7O0aFaScJKdPgj/br9BsiV/DAScirtYosPxWUiEgFWK3WCp3iXP4/u92O1ep87WgTXzV1ec3HTHsYiVQHAQEB5Ofnc+HCBSwWi9vm4+/vX+5vkszA2ZyGYWC1WgkICHB6bBWUiEgFWCwWateu7fb5REZGkpmZ6fb5VJY7c2oTXw2h75JEpKpRQYmIiCmpoERExJQ88h3UxYsXmTFjBna7nYKCAjp27EhcXBzp6enMmzeP3NxcmjVrxqOPPoqvry+XLl3i9ddf5+effyY4OJipU6dyww03eCKqXMPgj/ZrpwsR8RiPrEH5+fkxY8YMZs2axSuvvMKuXbs4cOAAy5YtY8CAASxYsIA6deo4DqWxYcMG6tSpw4IFCxgwYECph+6Qq+l7JhGpTjxSUBaLxbFrYUFBAQUFBVgsFvbu3UvHjh0B6NmzJykpKQBs376dnj17AtCxY0d+/PFH/ThORKSG8dhu5oWFhfzxj3/k5MmT3HPPPdSrV4/AwEB8fHyAooMW2mw2AGw2GxEREUDReU4CAwPJzc11HIH3suTkZMfhOxITE4mMjKxURl9f30qP4W7lZbzyvuLXy7pcmfuuN6dZKKdrKafrVIWM4N6cHisoq9XKrFmzyMvLY/bs2Rw/frzSY8bGxhIbG+u4Xtl98avC7w7Ky3jlfcWvl3W5Mvddb06zUE7XUk7XqQoZwTU5GzRoUOrtHt+Lr06dOrRq1YoDBw5w7tw5CgoKgKK1pvDwcKBobSorKwso2iR47tw5goODPR1VRES8yCMFdebMGfLy8oCiPfr27NlDw4YNadWqFdu2bQNg48aNxMTEAHDXXXexceNGALZt20arVq3cekgRERExH49s4svOzmbhwoUUFhZiGAadOnXirrvuolGjRsybN49PPvmEm2++md69ewPQu3dvXn/9dR599FGCgoJKnLVRRERqBo8UVNOmTUs902K9evV46aWXrrq9Vq1aPPbYY56IJiIiJqUjSYiIiCmpoERExJRUUCIiYkoqKBERMSUVlIiImJIKSkRETEkFJSIipqSCquJ0ig0Rqa5UUCIiYkoqKBERMSUVlIiImJIKSkRETEkFJSIipqSCkuuivQdFxN1UUCIiYkoqKBERMSUVlIiImJIKSkRETEkFJSIipqSCEhERU1JBiYiIKamgRETElHw9MZPMzEwWLlzI6dOnsVgsxMbG0r9/f1asWMH69esJCQkBYOTIkbRr1w6AVatWsWHDBqxWK+PHj6dt27aeiCoiIibhkYLy8fFh9OjRNGvWjPPnz/PUU0/Rpk0bAAYMGMCgQYNKTH/s2DG2bt3Kq6++SnZ2NgkJCcyfPx+rVSt8IiI1hUc+8cPCwmjWrBkAtWvXpmHDhthstjKnT0lJoXPnzvj5+XHDDTdQv359Dh065ImoIiJiEh5ZgyouPT2dI0eO0KJFC/bv38/atWvZvHkzzZo1Y8yYMQQFBWGz2WjZsqXjMeHh4aUWWnJyMsnJyQAkJiYSGRlZqWy+vr6VHsPdSstY/Lqz97ljjPJympFyupZyuk5VyAjuzenRgsrPz2fOnDmMGzeOwMBA+vXrx/DhwwFYvnw5S5cuJT4+3unxYmNjiY2NdVzPzMysVL7IyMhKj+FupWUsft3Z+9wxxmWDP9rPlt93Nf2yhKrxmoNyulpVyFkVMoJrcjZo0KDU2z32pY7dbmfOnDl069aNDh06ABAaGorVasVqtdKnTx8OHz4MFK0xZWVlOR5rs9kIDw/3VFQRETEBjxSUYRgsWrSIhg0bMnDgQMft2dnZjsvff/89jRs3BiAmJoatW7dy6dIl0tPTOXHiBC1atPBEVBERMQmPbOL76aef2Lx5M02aNOGJJ54AinYp37JlC0ePHsVisRAVFcXEiRMBaNy4MZ06deKxxx7DarXy4IMPag8+EZEaxiMFdcstt7BixYqrbr/8m6fSDBs2jGHDhrkzloiImJhWS0RExJRUUCIiYkoqqCqmy/xvGPzRfm/HEBFxOxWUiIiYkgpKRERMSQUllTb4o/3a7CgiLqeCEhERU1JBiYiIKamgRETElFRQIiJiSiooERExJRWUiIiYkgpKRERMSQUlIiKmpIISERFTuu6C+vHHH9m3b58rs4iIiDg4XVAzZsxg//6iw9kkJSUxf/585s+fz8qVK90WTkREai6nCyotLY3o6GgA1q9fz4wZM5g5cybr1q1zWzgREam5nD7lu2EYAJw8eRKARo0aAZCXl+eGWCIiUtM5XVC/+c1veO+998jOzqZ9+/ZAUVkFBwe7LZyIiNRcTm/imzRpEoGBgTRt2pS4uDgAjh8/Tv/+/d0WTkREai6nC+rHH3/kvvvuIy4ujoCAAADatWtHRESE28JJEZ1rSURqIqc38S1atIhOnTpddftbb71Fx44dr/nYzMxMFi5cyOnTp7FYLMTGxtK/f3/Onj3L3LlzycjIICoqimnTphEUFIRhGCxZsoSdO3fi7+9PfHw8zZo1q/izExGRKqvcgjp16hQAhYWFpKenO3aWuHxfrVq1yp2Jj48Po0ePplmzZpw/f56nnnqKNm3asHHjRlq3bs2QIUNISkoiKSmJUaNGsXPnTk6ePMlrr73GwYMHeffdd3nxxRcr8TRFRKSqKbegpkyZ4rj86KOPlrgvNDSUESNGlDuTsLAwwsLCAKhduzYNGzbEZrORkpLCn//8ZwB69OjBn//8Z0aNGsX27dvp3r07FouF6Oho8vLyyM7OdowhIiLVX7kFtXz5cqDoh7rPP/98pWeYnp7OkSNHaNGiBTk5OY7SCQ0NJScnBwCbzUZkZKTjMREREdhstqsKKjk5meTkZAASExNLPOZ6+Pr6VnoMd7kyV/HrZV12xXTXO4aZl2Vxyulayuk6VSEjuDen099BuaKc8vPzmTNnDuPGjSMwMLDEfRaLBYvFUqHxYmNjiY2NdVzPzMysVL7IyMhKj+EuV+Yqfr2sy66Y7nrHsNvtpl2WxZn5NS9OOV2rKuSsChnBNTkbNGhQ6u1OF1R6ejoff/wxR48eJT8/v8R9b775ZrmPt9vtzJkzh27dutGhQwcA6tat69h0l52dTUhICADh4eElnnBWVhbh4eHORhURkWrA6YKaP38+9erVY8yYMfj7+1doJoZhsGjRIho2bMjAgQMdt8fExLBp0yaGDBnCpk2bHD8AjomJ4auvvqJLly4cPHiQwMBAff9UDVzeXX71/bd4OYmIVAVOF9SxY8dISEjAaq34AdB/+uknNm/eTJMmTXjiiScAGDlyJEOGDGHu3Lls2LDBsZs5wJ133smOHTuYMmUKtWrVIj4+vsLzFBGRqs3pgrr11ls5evTodf0e6ZZbbmHFihWl3jd9+vSrbrNYLEyYMKHC8xERkerD6YKKiopi5syZ3H333YSGhpa4795773V1LhERqeGcLqgLFy5w1113UVBQQFZWljsziYiIOF9Q+h5IREQ8yemCunzIo9LUq1fPJWFEREQuc7qgih/y6EqXjzYhIiLiKk4X1JUldPr0aT799FNuvfVWl4cSERGp+I+a/k9oaCjjxo3jr3/9qyvziIiIAJUoKCg6o+6FCxdclUWqIZ1sUUSul9Ob+KZPn17iYK4XLlwgLS2N4cOHuyWYiIjUbE4XVO/evUtcDwgIoGnTptx4440uDyU1w+CP9uu4fCJSJqcLqmfPnm6MISIiUpLTBWW321m5ciWbN292nCKje/fuDBs2DF9fp4cRERFxitPNsmzZMg4fPsxDDz1EVFQUGRkZfPbZZ5w7d45x48a5MaLUBNrcJyJXcrqgtm3bxqxZswgODgaKzoB4880388QTT6igRETE5ZzezdwwDHfmEBERKcHpNahOnTrx8ssvM3z4cMc56D/77DM6duzoznwiIlJDOV1Qo0aN4rPPPmPx4sVkZ2cTHh5Oly5d+J//+R935hMRkRqq3ILav38/27dvZ9SoUdx7770lTk64bNkyfv75Z6Kjo90aUkREap5yv4NatWoVt912W6n33X777axcudLloUSHCBIRKbegjh49Stu2bUu9r3Xr1hw5csTVmURERMovqPPnz2O320u9r6CggPPnz7s8lIiISLkF1bBhQ3bv3l3qfbt376Zhw4YuDyUiIlLuThIDBgzg7bffprCwkPbt22O1WiksLCQlJYXFixczZsyYcmfyxhtvsGPHDurWrcucOXMAWLFiBevXryckJASAkSNH0q5dO6Doe68NGzZgtVoZP358mZsYRUSk+iq3oLp27crp06dZuHAhly5dIiQkhDNnzuDn50dcXBxdu3YtdyY9e/bkt7/9LQsXLixx+4ABAxg0aFCJ244dO8bWrVt59dVXyc7OJiEhgfnz52O1VurUVTVWwUP/t3x7vuLdICIiFeTU76AGDhxI7969OXDgAGfPniUoKIjo6GgCAwOdmsltt91Genq6U9OmpKTQuXNn/Pz8uOGGG6hfvz6HDh3SruwiIjWM0z/UDQwMdPmmtrVr17J582aaNWvGmDFjCAoKwmaz0bJlS8c04eHh2Gy2Uh+fnJxMcnIyAImJiURGRlYqj6+vb6XHcKXiWa7MVdZ918p/PeNVZF7Frxdflq7I7i5me83LopyuVRVyVoWM4N6cXjtPRr9+/Rxn412+fDlLly4lPj6+QmPExsYSGxvruJ6ZmVmpTJcP4WQWxbNcmaus+66V/3rGq8i8il+32+2O667I7i5me83LopyuVRVyVoWM4JqcDRo0KPV2r32xExoaitVqxWq10qdPHw4fPgwUrTFlZWU5prPZbISHh3srpscM/mi/fpwrIlKM1woqOzvbcfn777+ncePGAMTExLB161YuXbpEeno6J06coEWLFt6KKSIiXuKRTXzz5s1j37595Obm8sgjjxAXF8fevXs5evQoFouFqKgoJk6cCEDjxo3p1KkTjz32GFarlQcffFB78FVQwUODtNeeiFR5HimoqVOnXnVb7969y5x+2LBhDBs2zI2JRETE7LRqIiIipqSCqkIcP7qt5pzdYUQ7lohUbyooERExJRWUiIiYkgrK5GrKZj0RkSupoERExJRUUCIiYkoqKBERMSUVVA2j77REpKpQQYnpFf+tk373JFJzqKBERMSUVFAiImJKKigBir6b0vdTImImKigRETElFZSIiJiSCkpERExJBSUiIqakgjIZ7axw/fQbKZHqRQUlIiKmpIKqJrTWJSLVjQpKqj2dGl6kalJBiYiIKfl6YiZvvPEGO3bsoG7dusyZMweAs2fPMnfuXDIyMoiKimLatGkEBQVhGAZLlixh586d+Pv7Ex8fT7NmzTwRU4opeGgQ9HzF2zFEpAbzyBpUz549eeaZZ0rclpSUROvWrXnttddo3bo1SUlJAOzcuZOTJ0/y2muvMXHiRN59911PRBQREZPxSEHddtttBAUFlbgtJSWFHj16ANCjRw9SUlIA2L59O927d8disRAdHU1eXh7Z2dmeiCkiIibikU18pcnJySEsLAyA0NBQcnJyALDZbERGRjqmi4iIwGazOaYtLjk5meTkZAASExNLPO56+Pr6VnqMiugy/xu2/L5rmfdHRkZyqpTLUGyvvZ6vXHO6a43nzHyvnLasy1deL74srzWds+Ndz3RXKu0+T7/m10s5Xasq5KwKGcG9Ob1WUMVZLBYsFkuFHxcbG0tsbKzjemZmZqVyREZGVnqMirrW/Irf563prvW4a01nt9sd110x3vVMd6XS7vPGa349lNO1qkLOqpARXJOzQYMGpd7utb346tat69h0l52dTUhICADh4eElnmxWVhbh4eFeyegp+g2TiMjVvFZQMTExbNq0CYBNmzbRvn17x+2bN2/GMAwOHDhAYGBgqZv3RESkevPIJr558+axb98+cnNzeeSRR4iLi2PIkCHMnTuXDRs2OHYzB7jzzjvZsWMHU6ZMoVatWsTHx3siYo2kXclFxMw8UlBTp04t9fbp06dfdZvFYmHChAluTiSVoWITEU/QkSRERMSUVFBeUh13jDDTqUJ07D2Rqk8FJeUyU/GISM2hghIREVNSQXmYNj15n14DkapBBSXyf3TeKBFzUUGJiIgpqaCkRusy/xtvRxCRMqigRETElFRQIiJiSiooERExJRWUVEpN+QGv9u4T8TwVlIsU/wC78rI+3GpOkYmI66igRETElFRQIiJiSiooERExJRWUSBn03aGId6mgxOu0A4WIlEYFJW6j4hGRylBBibiQNguKuI4KSkRETEkFJVJJWmsScQ9fbweYNGkSAQEBWK1WfHx8SExM5OzZs8ydO5eMjAyioqKYNm0aQUFB3o5aKY7vY3q+4t0gJlfw0CDTL6PLhbT6/lu8nESkevN6QQHMmDGDkJAQx/WkpCRat27NkCFDSEpKIikpiVGjRnkxoYiIeJopN/GlpKTQo0cPAHr06EFKSoqXE10f7cVWuoKHBmnZiEi5TLEGNXPmTAD69u1LbGwsOTk5hIWFARAaGkpOTo4344mIiBd4vaASEhIIDw8nJyeHF154gQYNGpS432KxYLFYSn1scnIyycnJACQmJhIZGVmpLL6+vpUaIzIyklNDO0PPV4ouX2u6Ui6bcbrrHcPX9/+/ta53vOKvRVmXq8J0rlDZ96anKKfrVIWM4N6cXi+o8PBwAOrWrUv79u05dOgQdevWJTs7m7CwMLKzs0t8P1VcbGwssbGxjuuZmZmVyhIZGVmpMYo/9lrjVKXprncMu91e6fGuvO/yDhTlTefseJ6azhUq+970FOV0naqQEVyT88oVk8u8+h1Ufn4+58+fd1zes2cPTZo0ISYmhk2bNgGwadMm2rdv782YIiLiBV5dg8rJyWH27NkAFBQU0LVrV9q2bUvz5s2ZO3cuGzZscOxmblbafVxExD28WlD16tVj1qxZV90eHBzM9OnTvZBIRETMwpS7mYtUd4M/2l/iCBRlXRapyVRQIm5yrRISkfKpoERExJS8vpt5VXX5v+GVXs4hIlJdaQ1KRERMSQUlIiKmpIISMbErd7QQqUlUUFIl6WjoItWfCkqqPJ2+w/k1La2RSVWighIRQL/TEvNRQYlpuWLNqDqvWalQpLpTQYlUISolqUlUUCJX0HdaIuaggpIa43qLp6qX1fWsdWlnCjEDFVQF6A+2aqiJJSRSHamgpMZyZylVlcLTP11iZiookQqoqcWjIhNvUEGJiMt0mf+NtyNINaKCEpEK0dqUeIoKSqQKMsumRu3tJ+6kgroOZvlwEHO51vuiJr5nrjzdfVlF5ux05T3OXVTC3qOCEvEwT5aVKw4V5Y7d9r31ga+iqVpUUCLXyVXHCixrDGfHdkXhmf23Y+6Yl9aMzM/UBbVr1y5+//vf8+ijj5KUlOSVDHoDiyeV9UF8amhnpz6kXVF45Y3vSq5Y07pyDLMUT1mbIM2SryowbUEVFhayePFinnnmGebOncuWLVs4duyYt2OJVAuuLjJPHHm+sh/qNfF7wKrOtAV16NAh6tevT7169fD19aVz586kpKS4fb7670bEfZwtsvIKtCLlWt7f8+XxnN3pwp1rRqU9vrx8rjhZpVk/9yyGYRjeDlGabdu2sWvXLh555BEANm/ezMGDB3nwwQcd0yQnJ5OcnAxAYmKiV3KKiIh7mHYNyhmxsbEkJia6rJyeeuopl4zjTlUhIyinqymna1WFnFUhI7g3p2kLKjw8nKysLMf1rKwswsPDvZhIREQ8ybQF1bx5c06cOEF6ejp2u52tW7cSExPj7VgiIuIhvt4OUBYfHx8eeOABZs6cSWFhIb169aJx48ZunWdsbKxbx3eFqpARlNPVlNO1qkLOqpAR3JvTtDtJiIhIzWbaTXwiIlKzqaBERMSUTPsdlCft2rWLJUuWUFhYSJ8+fRgyZIi3IwGQmZnJwoULOX36NBaLhdjYWPr378+KFStYv349ISEhAIwcOZJ27dp5NeukSZMICAjAarXi4+NDYmIiZ8+eZe7cuWRkZBAVFcW0adMICgryWsbjx48zd+5cx/X09HTi4uLIy8vz+vJ844032LFjB3Xr1mXOnDkAZS4/wzBYsmQJO3fuxN/fn/j4eJo1a+aVjB9++CGpqan4+vpSr1494uPjqVOnDunp6UybNo0GDRoA0LJlSyZOnOj2jGXlvNbfzKpVq9iwYQNWq5Xx48fTtm1br+WcO3cux48fB+DcuXMEBgYya9Ysry7Psj6HPPL+NGq4goICY/LkycbJkyeNS5cuGY8//riRlpbm7ViGYRiGzWYzDh8+bBiGYZw7d86YMmWKkZaWZixfvtxYvXq1l9OVFB8fb+Tk5JS47cMPPzRWrVplGIZhrFq1yvjwww+9kKx0BQUFxoQJE4z09HRTLM+9e/cahw8fNh577DHHbWUtv9TUVGPmzJlGYWGh8dNPPxlPP/201zLu2rXLsNvtjryXM546darEdJ5UWs6yXuO0tDTj8ccfNy5evGicOnXKmDx5slFQUOC1nMV98MEHxqeffmoYhneXZ1mfQ554f9b4TXzeOqSSM8LCwhz/edSuXZuGDRtis9m8nMp5KSkp9OjRA4AePXqYZrkC/PDDD9SvX5+oqChvRwHgtttuu2rtsqzlt337drp3747FYiE6Opq8vDyys7O9kvGOO+7Ax8cHgOjoaFO8P0vLWZaUlBQ6d+6Mn58fN9xwA/Xr1+fQoUNuTljkWjkNw+Dbb7+lS5cuHslyLWV9Dnni/VnjN/HZbDYiIiIc1yMiIjh48KAXE5UuPT2dI0eO0KJFC/bv38/atWvZvHkzzZo1Y8yYMV7ddHbZzJkzAejbty+xsbHk5OQQFhYGQGhoKDk5Od6MV8KWLVtK/PGbcXmWtfxsNhuRkZGO6SIiIrDZbI5pvWXDhg107tzZcT09PZ0nn3yS2rVr87vf/Y5bb73Vi+lKf41tNhstW7Z0TBMeHm6Kkv33v/9N3bp1ufHGGx23mWF5Fv8c8sT7s8YXVFWQn5/PnDlzGDduHIGBgfTr14/hw4cDsHz5cpYuXUp8fLxXMyYkJBAeHk5OTg4vvPCCY1v5ZRaLBYvF4qV0JdntdlJTU7nvvvsATLk8r2Sm5VealStX4uPjQ7du3YCi/7rfeOMNgoOD+fnnn5k1axZz5swhMDDQK/mqwmtc3JX/QJlheV75OVScu96fNX4Tn9kPqWS325kzZw7dunWjQ4cOQNF/K1arFavVSp8+fTh8+LCXU+JYZnXr1qV9+/YcOnSIunXrOlbts7OzHV9Qe9vOnTu5+eabCQ0NBcy5PIEyl194eDiZmZmO6bz9nt24cSOpqalMmTLF8SHl5+dHcHAwAM2aNaNevXqcOHHCaxnLeo2v/Pu32Wxe//svKCjg+++/L7E26u3lWdrnkCfenzW+oMx8SCXDMFi0aBENGzZk4MCBjtuLb8/9/vvv3X6EjfLk5+dz/vx5x+U9e/bQpEkTYmJi2LRpEwCbNm2iffv23ozpcOV/p2ZbnpeVtfxiYmLYvHkzhmFw4MABAgMDvbZ5b9euXaxevZo//vGP+Pv7O24/c+YMhYWFAJw6dYoTJ05Qr149r2SEsl/jmJgYtm7dyqVLl0hPT+fEiRO0aNHCWzGBou9HGzRoUOKrB28uz7I+hzzx/tSRJIAdO3bwwQcfOA6pNGzYMG9HAmD//v1Mnz6dJk2aOP4zHTlyJFu2bOHo0aNYLBaioqKYOHGiV79/OHXqFLNnzwaK/vvr2rUrw4YNIzc3l7lz55KZmWmK3cyhqEDj4+N5/fXXHZspFixY4PXlOW/ePPbt20dubi5169YlLi6O9u3bl7r8DMNg8eLF7N69m1q1ahEfH0/z5s29knHVqlXY7XbH63p59+dt27axYsUKfHx8sFqtjBgxwmP/+JWWc+/evWW+xitXruTrr7/GarUybtw47rzzTq/l7N27NwsXLqRly5b069fPMa03l2dZn0MtW7Z0+/tTBSUiIqZU4zfxiYiIOamgRETElFRQIiJiSiooERExJRWUiIiYkgpKpBqaNGkSe/bs8fh8Lx8hvqCgwOPzlupHhzqSGmH//v0sW7aMtLQ0rFYrjRo1YuzYsZX+UebGjRtZv349CQkJLkpatUyaNImHH36YNm3aeDuKVEMqKKn2zp07R2JiIhMmTKBz587Y7Xb+/e9/4+fn5+1oInINKiip9i4fs6xr164A1KpVizvuuKPENBs2bGDNmjWcPn2aFi1aMHHiRMepOOLi4pgwYQJ///vfOXPmDF27duXBBx/k119/5Z133sFutzN69Gh8fHx4//33uXTpEh9//DHffvstdrud9u3bM27cOGrVqsXevXtZsGABAwYMYPXq1VitVkaOHEmvXr0AuHjxIp988gnbtm0jLy+PJk2a8Nxzz1GrVi0OHDjA0qVLOXbsGFFRUYwbN45WrVqV+/wLCwv5/PPPWb9+PXl5edx+++1MnDiRoKAg0tPTmTx5MvHx8SxfvpyLFy8yYMAAx9FULl68yNtvv01qaiqhoaH07NmTL7/8kkWLFrFgwQIyMzN5+eWXsVqtDB8+nE6dOgHwr3/9q9TxRCrkus8kJVJF5OXlGePHjzcWLFhg7Nixw8jNzS1x//fff29MnjzZSEtLM+x2u/G3v/3NePbZZx33jxgxwnjppZeMs2fPGhkZGcYDDzxg7Ny50zAMw/j666+NP/3pTyXGW7JkiZGYmGjk5uYa586dM1566SXjo48+MgzDMH788Ufj3nvvNT755BPj0qVLRmpqqnH//fc7Mr3zzjvGjBkzjKysLKOgoMDYv3+/cfHiRSMrK8sYP368kZqaahQUFBi7d+82xo8ff9VJIi+Lj483du/ebRiGYXzxxRfGM888Y2RmZhoXL1403nrrLWPu3LmGYRSdCG/EiBHGm2++aVy4cME4cuSIMXLkSMdJO5ctW2ZMnz7dyM3NNTIzM40//OEPxsMPP1zqfJwZT6QitJOEVHuBgYH85S9/wWKx8NZbbzFhwgRefvllTp8+DcC6desYOnQojRo1wsfHh6FDh3L06FEyMjIcYwwZMoQ6deoQGRlJq1atOHr0aKnzMgyD9evXM3bsWIKCgqhduzbDhg1jy5Ytjml8fHwYPnw4vr6+tGvXjoCAAI4fP05hYSFff/0148aNIzw8HKvVym9+8xv8/PzYvHkzd955J+3atcNqtdKmTRuaN2/Ojh07yn3+69at43e/+x0RERH4+fkxYsQIvvvuuxI7MowYMYJatWpx00030bRpU3755RcAvv32W4YOHUpQUBARERH813/9l1PLvKzxRCpCm/ikRmjUqBGTJk0C4Ndff2XBggW8//77TJ06lYyMDJYsWcLSpUsd0xuGgc1mc2zmu3xqDgB/f3/y8/NLnc+ZM2e4cOECTz31VImxLh+JGiA4ONhxFtri4+Xm5nLp0iXq169/1biZmZls27aN1NRUx20FBQVObeLLyMhg9uzZJc7XY7VaS5xAsqznl52dfdXJ55zh7PISuRYVlNQ4DRs2pGfPnqxbtw6AyMhIhg0b5jjZXmUEBwdTq1YtXn311QqfAyc4OBg/Pz9OnjzJTTfdVOK+iIgIunXrxiOPPFLhTBEREfzv//4vt9xyy1X3paenX/OxoaGhZGVl0ahRI4AS504ScTdt4pNq79dff2XNmjWOD9fMzEy2bNniONV33759SUpKIi0tDSja6+/bb791auzQ0FBsNht2ux3AcUK8999/v8QpsHft2lXuWFarlV69erF06VJsNhuFhYUcOHCAS5cu0a1bN1JTU9m1axeFhYVcvHiRvXv3OlUYffv25ZNPPnFssjxz5gwpKSlOPb9OnTqRlJTE2bNnsdlsfPXVV1c9//JKTuR6aQ1Kqr3atWtz8OBB/v73v3Pu3DkCAwO56667GDVqFAB33303+fn5zJs3j8zMTAIDA2ndurVjj7Rruf3222nUqBEPPfQQVquVxYsXc//99/O3v/2NZ599ltzcXMLDw+nbty9t27Ytd7wxY8bw17/+laeffpr8/Hxuuukmnn32WSIjI3nyySdZtmwZ8+fPx2q10qJFCx566KFyx+zfvz8AL7zwAtnZ2dStW5dOnTo5dQLJ4cOH88477zB58mTCwsLo2rUrGzdudNw/ZMgQ3nvvPZYtW8awYcPo2LFjuWOKOEvngxIRp/3zn/9ky5YtPP/8896OIjWANvGJSJmys7PZv38/hYWFHD9+nDVr1nD33Xd7O5bUENrEJyJlstvtvPPOO6SnpxMYGEiXLl245557vB1Laght4hMREVPSJj4RETElFZSIiJiSCkpERExJBSUiIqakghIREVP6f0+JH7wIZTGKAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "posdf = data[data.label==1]\n",
        "pos_texts = posdf['text'].astype(str).values.tolist()\n",
        "pos_texts_tokened = [snt.split() for snt in pos_texts]\n",
        "pos_texts_len = [len(snt) for snt in pos_texts_tokened]\n",
        "\n",
        "negdf = data[data.label==0]\n",
        "neg_texts = negdf['text'].astype(str).values.tolist()\n",
        "neg_texts_tokened = [snt.split() for snt in neg_texts]\n",
        "neg_texts_len = [len(snt) for snt in neg_texts_tokened]\n",
        "\n",
        "print(np.mean(pos_texts_len), np.mean(neg_texts_len))\n",
        "print(np.std(pos_texts_len), np.std(neg_texts_len))\n",
        "\n",
        "plt.hist([pos_texts_len, neg_texts_len], bins=100, label=[\"positive\", \"negative\"], range=(0, 200))\n",
        "# plt.hist(neg_texts_len, bins=100, alpha=0.5, label=\"negative\")\n",
        "plt.legend()\n",
        "plt.xlabel(\"Sentence length\")\n",
        "plt.ylabel(\"Counts\")\n",
        "plt.tight_layout()\n",
        "plt.savefig(\"sentence-len.pdf\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AVQS6Sh7hIUl"
      },
      "source": [
        "# Data analysis of positive samples"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 423
        },
        "id": "hZQhI4Zse24e",
        "outputId": "8a4db0e6-582d-4e0a-e81d-e2a89e2f3a07"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "\n",
              "  <div id=\"df-66d5f609-0f96-4961-871a-9fd688bd4c8a\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>par_id</th>\n",
              "      <th>art_id</th>\n",
              "      <th>keyword</th>\n",
              "      <th>country</th>\n",
              "      <th>text</th>\n",
              "      <th>label</th>\n",
              "      <th>orig_label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>4341</td>\n",
              "      <td>@@17139403</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>gb</td>\n",
              "      <td>The scheme saw an estimated 150,000 children f...</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>4136</td>\n",
              "      <td>@@22273328</td>\n",
              "      <td>homeless</td>\n",
              "      <td>za</td>\n",
              "      <td>Durban 's homeless communities reconciliation ...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>10352</td>\n",
              "      <td>@@21102155</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>lk</td>\n",
              "      <td>The next immediate problem that cropped up was...</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>8279</td>\n",
              "      <td>@@21220476</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>nz</td>\n",
              "      <td>Far more important than the implications for t...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1164</td>\n",
              "      <td>@@14727121</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>gh</td>\n",
              "      <td>To strengthen child-sensitive social protectio...</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>789</th>\n",
              "      <td>873</td>\n",
              "      <td>@@20374243</td>\n",
              "      <td>poor-families</td>\n",
              "      <td>sg</td>\n",
              "      <td>Citing the fact that these kids who died at Go...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>790</th>\n",
              "      <td>10070</td>\n",
              "      <td>@@15573661</td>\n",
              "      <td>disabled</td>\n",
              "      <td>ng</td>\n",
              "      <td>Fern ? ndez was a well-known philanthropist wh...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>791</th>\n",
              "      <td>6484</td>\n",
              "      <td>@@2559173</td>\n",
              "      <td>homeless</td>\n",
              "      <td>lk</td>\n",
              "      <td>Touched much by their plight , Commanding Offi...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>792</th>\n",
              "      <td>6249</td>\n",
              "      <td>@@1947926</td>\n",
              "      <td>women</td>\n",
              "      <td>gh</td>\n",
              "      <td>She reiterated her ministry 's commitment to p...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>793</th>\n",
              "      <td>5149</td>\n",
              "      <td>@@1789214</td>\n",
              "      <td>vulnerable</td>\n",
              "      <td>gh</td>\n",
              "      <td>Preaching the sermon , the Dean of the St. Pet...</td>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>794 rows × 7 columns</p>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-66d5f609-0f96-4961-871a-9fd688bd4c8a')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-66d5f609-0f96-4961-871a-9fd688bd4c8a button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-66d5f609-0f96-4961-871a-9fd688bd4c8a');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ],
            "text/plain": [
              "    par_id      art_id        keyword country  \\\n",
              "0     4341  @@17139403  poor-families      gb   \n",
              "1     4136  @@22273328       homeless      za   \n",
              "2    10352  @@21102155  poor-families      lk   \n",
              "3     8279  @@21220476     vulnerable      nz   \n",
              "4     1164  @@14727121  poor-families      gh   \n",
              "..     ...         ...            ...     ...   \n",
              "789    873  @@20374243  poor-families      sg   \n",
              "790  10070  @@15573661       disabled      ng   \n",
              "791   6484   @@2559173       homeless      lk   \n",
              "792   6249   @@1947926          women      gh   \n",
              "793   5149   @@1789214     vulnerable      gh   \n",
              "\n",
              "                                                  text  label orig_label  \n",
              "0    The scheme saw an estimated 150,000 children f...      1          4  \n",
              "1    Durban 's homeless communities reconciliation ...      1          2  \n",
              "2    The next immediate problem that cropped up was...      1          4  \n",
              "3    Far more important than the implications for t...      1          2  \n",
              "4    To strengthen child-sensitive social protectio...      1          4  \n",
              "..                                                 ...    ...        ...  \n",
              "789  Citing the fact that these kids who died at Go...      1          2  \n",
              "790  Fern ? ndez was a well-known philanthropist wh...      1          2  \n",
              "791  Touched much by their plight , Commanding Offi...      1          2  \n",
              "792  She reiterated her ministry 's commitment to p...      1          2  \n",
              "793  Preaching the sermon , the Dean of the St. Pet...      1          2  \n",
              "\n",
              "[794 rows x 7 columns]"
            ]
          },
          "execution_count": 28,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "posdf = data[data.label==1]\n",
        "posdf"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-VGZ0lN6GufX",
        "outputId": "3dbc536c-37c6-4680-a300-61aa2abd9a61"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "poor-families: 112\n",
            "homeless: 149\n",
            "vulnerable: 60\n",
            "migrant: 31\n",
            "hopeless: 98\n",
            "women: 38\n",
            "disabled: 67\n",
            "immigrant: 23\n",
            "refugee: 73\n",
            "in-need: 143\n",
            "my: 35\n",
            "tz: 30\n",
            "ie: 42\n",
            "in: 32\n",
            "au: 32\n",
            "ph: 52\n",
            "nz: 35\n",
            "lk: 40\n",
            "us: 34\n",
            "sg: 34\n",
            "bd: 37\n",
            "gh: 63\n",
            "pk: 39\n",
            "jm: 47\n",
            "ke: 32\n",
            "gb: 48\n",
            "ca: 38\n",
            "za: 47\n",
            "ng: 57\n",
            "hk: 20\n"
          ]
        }
      ],
      "source": [
        "for k in keywords:\n",
        "  print(f\"{k}: {len(posdf[posdf.keyword==k])}\")\n",
        "\n",
        "for k in countries:\n",
        "  print(f\"{k}: {len(posdf[posdf.country==k])}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 664
        },
        "id": "Wpzgvb50dJR2",
        "outputId": "b7735921-880e-4398-fe4d-8143a5705e9d"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "90.0\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "(array([20., 21., 27., 56., 40., 86., 72., 67., 63., 58., 47., 39., 34.,\n",
              "        26., 29., 12., 21.,  9., 11.,  7.,  8.,  5.,  9.,  7.,  1.,  5.,\n",
              "         5.,  2.,  3.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.,\n",
              "         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,\n",
              "         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n",
              "         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n",
              "         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,\n",
              "         0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.]),\n",
              " array([  6.  ,  11.06,  16.12,  21.18,  26.24,  31.3 ,  36.36,  41.42,\n",
              "         46.48,  51.54,  56.6 ,  61.66,  66.72,  71.78,  76.84,  81.9 ,\n",
              "         86.96,  92.02,  97.08, 102.14, 107.2 , 112.26, 117.32, 122.38,\n",
              "        127.44, 132.5 , 137.56, 142.62, 147.68, 152.74, 157.8 , 162.86,\n",
              "        167.92, 172.98, 178.04, 183.1 , 188.16, 193.22, 198.28, 203.34,\n",
              "        208.4 , 213.46, 218.52, 223.58, 228.64, 233.7 , 238.76, 243.82,\n",
              "        248.88, 253.94, 259.  , 264.06, 269.12, 274.18, 279.24, 284.3 ,\n",
              "        289.36, 294.42, 299.48, 304.54, 309.6 , 314.66, 319.72, 324.78,\n",
              "        329.84, 334.9 , 339.96, 345.02, 350.08, 355.14, 360.2 , 365.26,\n",
              "        370.32, 375.38, 380.44, 385.5 , 390.56, 395.62, 400.68, 405.74,\n",
              "        410.8 , 415.86, 420.92, 425.98, 431.04, 436.1 , 441.16, 446.22,\n",
              "        451.28, 456.34, 461.4 , 466.46, 471.52, 476.58, 481.64, 486.7 ,\n",
              "        491.76, 496.82, 501.88, 506.94, 512.  ]),\n",
              " <a list of 100 Patch objects>)"
            ]
          },
          "execution_count": 12,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAANP0lEQVR4nO3dX6xlZXnH8e+vjIgglX+nhDJMBwPRkKaCmSAE01BomykY4YIYjbHTZpq5qS1WGxnapKZ3kDQiTRrTCdjOBVEUMRBMainiRW/GzgDKn5EyUlDIwIwNYNOLKu3Ti70YDscDs+ecs88+zz7fT3Ky13rX2uznPSx+vOdde62VqkKS1M8vTbsASdLSGOCS1JQBLklNGeCS1JQBLklNbVjNDzvjjDNq8+bNq/mRktTevn37flJVcwvbVzXAN2/ezN69e1fzIyWpvSTPLtbuFIokNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNbWqV2JOy+ad3zyy/MxNV0+xEklaOY7AJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmhorwJP8WZLHkzyW5MtJTkhybpI9SQ4kuTPJ8ZMuVpL0uqMGeJKzgT8FtlTVrwPHAR8FbgZuqarzgJeA7ZMsVJL0RuNOoWwA3pFkA3AicBC4Arhr2L4buHbly5MkvZmjBnhVPQ/8DfAjRsH9CrAPeLmqXh12ew44e7H3J9mRZG+SvYcPH16ZqiVJY02hnApcA5wL/CpwErB13A+oql1VtaWqtszNzS25UEnSG40zhfLbwH9U1eGq+jlwN3AZcMowpQKwEXh+QjVKkhYxToD/CLgkyYlJAlwJPAE8CFw37LMNuGcyJUqSFjPOHPgeRicrHwIeHd6zC7gB+HSSA8DpwO0TrFOStMBYj1Srqs8Bn1vQ/DRw8YpXJEkai1diSlJTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTY92NcJZs3vnNI8vP3HT1FCuRpOVxBC5JTRngktSUAS5JTRngktSUAS5JTRngktSUAS5JTRngktSUAS5JTRngktSUAS5JTa27e6HM531RJHXmCFySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmlrXV2LO51WZkrpxBC5JTRngktSUAS5JTY0V4ElOSXJXkh8k2Z/k0iSnJbk/yVPD66mTLlaS9LpxR+C3Av9UVe8F3gfsB3YCD1TV+cADw7okaZUcNcCTvAv4TeB2gKr6WVW9DFwD7B522w1cO6kiJUm/aJwR+LnAYeAfkjyc5LYkJwFnVtXBYZ8XgDMXe3OSHUn2Jtl7+PDhlalakjRWgG8A3g98saouAv6bBdMlVVVALfbmqtpVVVuqasvc3Nxy65UkDcYJ8OeA56pqz7B+F6NAfzHJWQDD66HJlChJWsxRA7yqXgB+nOQ9Q9OVwBPAvcC2oW0bcM9EKpQkLWrcS+n/BLgjyfHA08AfMgr/rybZDjwLfGQyJUqSFjNWgFfVI8CWRTZdubLlrA3eF0VSB16JKUlNGeCS1JQBLklNGeCS1NRMPdDBk4+S1hNH4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLU1Ew9lX4S5j/pHnzavaS1wxG4JDVlgEtSUwa4JDVlgEtSUwa4JDVlgEtSUwa4JDVlgEtSUwa4JDVlgEtSUwa4JDVlgEtSU2MHeJLjkjyc5L5h/dwke5IcSHJnkuMnV6YkaaFjGYFfD+yft34zcEtVnQe8BGxfycIkSW9trABPshG4GrhtWA9wBXDXsMtu4NpJFChJWty49wP/AvBZ4ORh/XTg5ap6dVh/Djh7sTcm2QHsANi0adPSKz1GC+/jLUmz5qgj8CQfAg5V1b6lfEBV7aqqLVW1ZW5ubin/CEnSIsYZgV8GfDjJVcAJwC8DtwKnJNkwjMI3As9PrkxJ0kJHDfCquhG4ESDJ5cCfV9XHk3wNuA74CrANuGeCda4Z86dmfLyapGlazvfAbwA+neQAoznx21emJEnSOI7pocZV9R3gO8Py08DFK1+SJGkcXokpSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0Z4JLUlAEuSU0d05WYeiPviyJpmhyBS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JT3gtlArxHiqTV4AhckpoywCWpKQNckpoywCWpqfYnMeefMJSk9cQRuCQ11X4Evlb4l4Ck1eYIXJKaMsAlqSkDXJKaMsAlqSkDXJKaMsAlqSkDXJKaMsAlqSkDXJKaMsAlqamjBniSc5I8mOSJJI8nuX5oPy3J/UmeGl5PnXy5kqTXjHMvlFeBz1TVQ0lOBvYluR/4A+CBqropyU5gJ3DD5Ep9Xdf7jvioNUkr6agj8Ko6WFUPDcv/BewHzgauAXYPu+0Grp1UkZKkX3RMc+BJNgMXAXuAM6vq4LDpBeDMFa1MkvSWxr6dbJJ3Al8HPlVVP01yZFtVVZJ6k/ftAHYAbNq0acmFdp02kaRJGWsEnuRtjML7jqq6e2h+MclZw/azgEOLvbeqdlXVlqraMjc3txI1S5IY71soAW4H9lfV5+dtuhfYNixvA+5Z+fIkSW9mnCmUy4BPAI8meWRo+wvgJuCrSbYDzwIfmUyJkqTFHDXAq+pfgbzJ5itXthxJ0ri8ElOSmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJakpA1ySmjLAJampsR+ppqXxUXCSJsURuCQ15Qh8DZg/Sn/mpqunWImkThyBS1JTBrgkNWWAS1JTBrgkNeVJzClZztcLPekpCRyBS1JbBrgkNeUUyhrmVImkt+IIXJKacgS+xhzryU1H6dL65QhckpoywCWpKQNckpoywCWpKU9iNrGck5vzeaJTmh2OwCWpKQNckpoywCWpKQNckpryJOY65lWcUm+OwCWpKUfg68xyHiQhaW1xBC5JTS1rBJ5kK3ArcBxwW1XdtCJVaUlWc3S98LOOdQ59WvPvzvtrtazGsbbkEXiS44C/A34PuAD4WJILVqowSdJbW84UysXAgap6uqp+BnwFuGZlypIkHU2qamlvTK4DtlbVHw3rnwA+UFWfXLDfDmDHsPoe4MkxP+IM4CdLKq6v9dZn+zvb7O/K+bWqmlvYOPFvoVTVLmDXsb4vyd6q2jKBktas9dZn+zvb7O/kLWcK5XngnHnrG4c2SdIqWE6A/xtwfpJzkxwPfBS4d2XKkiQdzZKnUKrq1SSfBL7F6GuEX6qqx1essiVMu8yA9dZn+zvb7O+ELfkkpiRpurwSU5KaMsAlqak1GeBJtiZ5MsmBJDunXc9KSPKlJIeSPDav7bQk9yd5ang9dWhPkr8d+v/9JO+fXuVLk+ScJA8meSLJ40muH9pnss9JTkjy3STfG/r710P7uUn2DP26czjhT5K3D+sHhu2bp1n/UiU5LsnDSe4b1me9v88keTTJI0n2Dm1TO6bXXIDP8CX6/whsXdC2E3igqs4HHhjWYdT384efHcAXV6nGlfQq8JmqugC4BPjj4d/jrPb5f4Arqup9wIXA1iSXADcDt1TVecBLwPZh/+3AS0P7LcN+HV0P7J+3Puv9Bfitqrpw3ne+p3dMV9Wa+gEuBb41b/1G4MZp17VCfdsMPDZv/UngrGH5LODJYfnvgY8ttl/XH+Ae4HfWQ5+BE4GHgA8wujJvw9B+5Nhm9O2tS4flDcN+mXbtx9jPjYwC6wrgPiCz3N+h9meAMxa0Te2YXnMjcOBs4Mfz1p8b2mbRmVV1cFh+AThzWJ6p38Hw5/JFwB5muM/DdMIjwCHgfuCHwMtV9eqwy/w+HenvsP0V4PTVrXjZvgB8Fvi/Yf10Zru/AAX8c5J9w21CYIrHtA90WCOqqpLM3Hc6k7wT+Drwqar6aZIj22atz1X1v8CFSU4BvgG8d8olTUySDwGHqmpfksunXc8q+mBVPZ/kV4D7k/xg/sbVPqbX4gh8PV2i/2KSswCG10ND+0z8DpK8jVF431FVdw/NM91ngKp6GXiQ0RTCKUleGyjN79OR/g7b3wX85yqXuhyXAR9O8gyjO5FewejZALPaXwCq6vnh9RCj/0lfzBSP6bUY4OvpEv17gW3D8jZG88Svtf/+cBb7EuCVeX+itZDRUPt2YH9VfX7eppnsc5K5YeRNkncwmu/fzyjIrxt2W9jf134P1wHfrmGitIOqurGqNlbVZkb/jX67qj7OjPYXIMlJSU5+bRn4XeAxpnlMT/ukwJucKLgK+HdGc4h/Oe16VqhPXwYOAj9nNBe2ndEc4APAU8C/AKcN+4bRN3F+CDwKbJl2/Uvo7wcZzRd+H3hk+LlqVvsM/Abw8NDfx4C/GtrfDXwXOAB8DXj70H7CsH5g2P7uafdhGX2/HLhv1vs79O17w8/jr2XTNI9pL6WXpKbW4hSKJGkMBrgkNWWAS1JTBrgkNWWAS1JTBrgkNWWAS1JT/w+wZmVjnEltMgAAAABJRU5ErkJggg==",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "texts = posdf['text'].astype(str).values.tolist()\n",
        "texts_tokened = [snt.split() for snt in texts]\n",
        "texts_len = [len(snt) for snt in texts_tokened]\n",
        "print(np.percentile(texts_len, 90))\n",
        "plt.hist(texts_len, bins=100)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "lAo2eK99eYZL",
        "outputId": "9d8024e4-bcf4-462c-c4e2-8e6a47b31e79"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "7044 42496\n",
            "in-need\n",
            "2125 7953\n",
            "refugee\n",
            "1294 3514\n",
            "poor-families\n",
            "1789 6105\n",
            "homeless\n",
            "2154 7306\n",
            "disabled\n",
            "1121 3098\n",
            "vulnerable\n",
            "1195 3326\n",
            "migrant\n",
            "961 2350\n",
            "women\n",
            "812 2028\n",
            "immigrant\n",
            "626 1431\n",
            "hopeless\n",
            "1774 5385\n",
            "in-need: ['counts' 'fond' 'cherish' 'mosque' 'medicards' 'selfish' 'retailing'\n",
            " 'importuned' 'eaten' 'dad' 'kindest' 'ashamed' 'spared' '\"another'\n",
            " 'penny' 'bothered' 'baron' 'earner' 'balkan' 'angels' 'cater'\n",
            " 'accessibility' 'appointed' 'three-michelin-starred' 'imbued'\n",
            " 'convenience' 'meets' 'partnering' 'shamefully' 'conscious' 'countrymen'\n",
            " 'prepares' 'tons' 'familiar' 'vicinity' 'notion' 'filmaid' 'disabused'\n",
            " 'teachings' 'intervention' 'blessing' 'scriptures' 'massimo' 'caroline'\n",
            " 'shops' 'jayathilake' 'campbell' 'implement' 'ransilu' 'fairprice'\n",
            " 'communication' 'subscribe' 'dinu' 'personality' 'weekly' 'dictate'\n",
            " 'organ' 'newsletter\"' '\"lakshan' 'transplants' 'madurasinghe' '\"dinu'\n",
            " 'positivity.' 'manne' 'smiles' 'game' 'liz' 'sustainability' 'companies'\n",
            " 'coca-cola' 'beverages' 'lifesaving' 'sold' 'item' 'ltd.' 'verse'\n",
            " 'straits' 'osteria' 'times\"' 'francescana' 'moderna' 'devised' 'vigilant'\n",
            " 'earnestly' 'redirect' '4:2' 'col' 'bottura' 'mouths' 'imaginative'\n",
            " 'longtime' 'profound' 'relative' 'it.' 'supplied' 'mudau' 'backing'\n",
            " 'connect' 'aspect' 'differentiates']\n",
            "refugee: ['van' 'accomplishments' 'catastrophe' '\"tusk' 'closing' 'davutoglu'\n",
            " 'epic' 'reported' 'multicultural' 'prided' '11-year-old' 'docklands'\n",
            " 'dutch' 'cover' 'strikes' 'guaranteeing' 'sweden' 'stake' 'innocents'\n",
            " 'antonio' 'shouldered' 'hollywood' 'abilities' 'notes' 'spare'\n",
            " 'uncertain' 'fast-tracks' 'lets' 'advertisement' '\"homeless' 'disqualify'\n",
            " 'non-muslim' '400,000' 'mandy' 'trends' 'globally' 'gaunt' 'helfrich'\n",
            " 'yazidi' 'net' '\"while' '\"talking' 'accumulating' 'mosquito' 'bite-and'\n",
            " 'pitiful' 'hang' 'curry' 'magnitude' '\"francis' 'simone' 'smashed'\n",
            " '\"visiting' 'swimmers' 'yusra' 'mardini' 'ramis' 'anis' 'medals' 'ruled'\n",
            " 'spectators' 'geography' 'mathematics' 'certified' 'biles' 'greek'\n",
            " 'gymnastics' 'thrill' 'usain' 'bolt' 'flew' 'finish' '\"courses'\n",
            " 'lebanese' 'sporting' 'approximately' 'wooden' 'chicago' 'verb'\n",
            " 'surviving' 'leg' 'homeland' 'unite' 'rwandese' 'angelia' '\"london'\n",
            " 'lest' 'traumatised' 'smugglers' 'ruthless' 'ditch' 'niger' 'ignore'\n",
            " 'avramopoulos' 'emulated' 'qualified' 'dimitris' 'produced' 'memorable'\n",
            " 'instruction']\n",
            "poor-families: ['anybody' 'absent' 'roadblocks' 'schools\"' 'answers' 'davao' 'golf'\n",
            " 'matina' 'dole-philippines' 'mandujano' 'tolerate' 'nonsense' 'lakh'\n",
            " 'pineapple' 'intimidate' '\"aileen' 'agriculture' 'banquet' 'chiefs' 'ol'\n",
            " 'pi' 'organise' 'ours' 'attaching' 'stuff' 'unconsciously' 'frayed'\n",
            " 'gachagua' 'holes' 'attributed' 'dmk' 'stalin' 'proposal' 'conduct'\n",
            " 'neet' 'rife' 'happily' 'infringe' 'philippine' 'unfavourable' '63'\n",
            " 'circle' 'teenage' 'characterised' 'connection' 'electrification'\n",
            " 'mindanao' 'plantations' '18,000-hectare' 'outrage' 'rozas' 'labor'\n",
            " 'jewish' 'posterity' 'furthest' 'wages' 'ordeal' 'isolation' 'sichuan'\n",
            " 'spanish' 'translates' 'beijing' 'extricating' 'honor' 'acquiring'\n",
            " 'samaritan' 'benazir' 'defender' 'portugal' 'unfamiliar' 'opinion'\n",
            " 'divides' 'pepe' 'convinced' 'territory' 'kenyatta' 'connections' '1st'\n",
            " 'reduced' 'equally' 'mobility' 'grit' 'layer' 'concealed' 'damp'\n",
            " 'quagmire' 'grandeur' 'whereby' 'crammed' 'william' 'ruto' 'shuttling'\n",
            " 'kurdish' 'sulaymaniah' 'pose' 'neighbourhood' 'avril' 'lavigne' 'cheap'\n",
            " '55']\n",
            "homeless: ['kretsge' 'calendar' 'suggestions' 'chafed' 'bs' 'evros' 'remembering'\n",
            " 'policeman' 'formerly' 'philadelphians' 'improved' 'departments'\n",
            " 'marietta' '10,000' 'regarding' 'contained' 'millennium' 'affording'\n",
            " 'nutter' 'chapter' 'twentyfifth' 'reliable' 'veritable' 'wherein'\n",
            " 'underclass' 'retorts' 'primed' '\"all' 's' 'earning' 'golden' 'accolades'\n",
            " 'lepers' 'arranged' 'unloved' 'uncared' 'nicole' 'expendable' 'derelict'\n",
            " 'sindh' 'joseph' 'tauranga' 'impetus' 'amanpour' 'christiane' 'cnn'\n",
            " '2,500' 'estimates' 'downplayed' 'commentary' 'salaried' 'facebook'\n",
            " 'credits' 'inset' 'leung' 'cy' 'interacting' 'trip' 'home\"' 'funeral'\n",
            " 'clothed' 'drink' 'abasement' 'worsening' 'principle' 'debacle'\n",
            " 'lengthening' 'defaults' 'virtual' 'jac' 'prayas' 'wiping' 'kanth' 'amod'\n",
            " 'scale' 'millionaire' 'endangered' 'sanctuaries' 'underside'\n",
            " 'rolheiserwhenever' 'ron' 'fr' 'approaching' 'cash-rich' 'cumbersome'\n",
            " 'rol' 'expansion' 'closely' 'kit' 'chow' '\"saturdays' 'brandishing'\n",
            " 'depressing' 'belong' 'scenario' 'convulsions' 'prospect' 'shortcomings'\n",
            " 'govt' 'correctly']\n",
            "disabled: ['limbs' 'thankfully' 'winners' 'krishna' 'tulasi' 'losers' 'entirely'\n",
            " 'trope' 'ruined' 'gold' 'manages' 'heavily' 'films' 'yusuf'\n",
            " 'protagonists' 'sacrificed' 'e.' 'l.' 'valiant' 'represent' 'able-bodied'\n",
            " 'wallowing' '129' 'injured/disabled' '36.5' 'accorded' 'emperor'\n",
            " 'under-privileged' 'degenerated' 'empowering' 'forks' 'gaza' 'spouse'\n",
            " 'overall' 'formulated' 'previously' 'details' 'decision-maker' '73'\n",
            " 'formal' 'approval' '105.01' 'substitute' '39' 'parent' 'muddy'\n",
            " 'self-obsession' 'esteem' 'abdala' 'anisa' 'exhilaration' 'read-along'\n",
            " 'wider' 'inquirer' 'practical' 'makati' 'tee' 'responsibilities'\n",
            " 'envelops' 'fulfilling' 'discovery' 'unconditional' 'brand' 'coping'\n",
            " 'guy' 'toni' 'revitalizes' 'bound' 'karate' 'equality' 'excel' 'context'\n",
            " 'named' 'adversity' 'crp' 'detract' 'pcd' 'completely' 'shelling' 'ajk'\n",
            " 'spokesperson/dg' 'ispr' 'raja' 'azhar' 'iqbal' 'confederations'\n",
            " 'confirmed' '25.6' 'paralympians' 'organizing' 'watching' 'mzbel'\n",
            " 'oxford' 'pritchard' 'mabel' 'trend' 'fun' 'dough' 'glimpses' 'pity']\n",
            "vulnerable: ['gorman' 'peaceful' 'emission' 'inquest' 'reduction' 'coexistence'\n",
            " 'antony' '2030' 'depending' 'technological' 'capacity-building' 'partly'\n",
            " 'counterpart' 'sharks' 'fries' 'zena' 'reham' 'tweet' 'impossible'\n",
            " 'sells' 'stevens' 'horribly' 'akara' 'cursed' 'johns' 'respecting'\n",
            " 'normally' 'olivier' 'stakeholders' 'horrible' 'measured'\n",
            " 'confidentiality' 'bcya' 'six-year-old' 'sandra' 'doubles' 'honfovu'\n",
            " 'denagan' 'unbearable' 'comrade' 'marry' 'abuja' 'badagry' 'ambition'\n",
            " 'siblings' 'unfaltering' 'elaborate' 'demands' '70%' 'carbon'\n",
            " 'comfortably' 'alfonso' '\"cosatu' 'unstable' 'lenhardt' 'loan' 'thanking'\n",
            " 'u.s' 'unaware' 'higgins' 'not-very-intelligent' 'society-'\n",
            " 'information-based' 'mchunu' 'free-market' 'watch' 'symptomatic'\n",
            " 'colombo' 'stir' 'whilst' 'christchurch' 'rda' 'scourge' 'tear'\n",
            " 'wherever' 'remarks' 'uncompleted' 'losi' 'wondering' 'learned' 'druggie'\n",
            " 'measures' 'tackled' 'paris' 'reflects' 'zingiswa' 'ethekwini'\n",
            " 'triggered' 'usaid' 'missioner' 'decrepit' 'cllr' 'zandile' 'gumede'\n",
            " 'kwazulu-natal' 'premier' 'administrator' 'willies' 'blithesome'\n",
            " 'balance']\n",
            "migrant: ['koh' 'bump' 'banning' 'ryan' 'shooting' 'remainder' 'plans' '\"ryan'\n",
            " 'archambault/afp' 'christophe' '14' 'andaman' 'lipe' 'stocks' 'waters'\n",
            " 'drifting' 'helicopter' 'thai' 'grabbing' 'parted' 'propinquity'\n",
            " 'oblivious' 'costs' 'enhance' 'nationals' 'theology' 'televisions'\n",
            " 'worrying' 'applicant' 'permanently' 'settling' 'dv' 'lottery'\n",
            " 'pathfinders' 'kong-born' 'lecture' 'prize' 'addressed' 'rejection'\n",
            " 'dwelt' 'refused' 'capsized' 'smuggler' 'overboard' 'pitched' 'rescuers'\n",
            " 'rescinding' 'daca' 'deferred' '800,000' 'emerged' 'u.n' 'sdg'\n",
            " 'unschooled' 'suppressed' 'slack' 'clunky' 'script' 'horrific' 'accents'\n",
            " 'gang' 'injustices' '\"immigration' 'heed' 'contention' 'nancy' 'pelosi'\n",
            " 'negotiate' 'nevertheless' 'advance' 'adult' '\"chinese' 'nurse' 'amy'\n",
            " 'ding' 'planet' 'racism' 'hatred' 'davos' 'cultivate' 'responsive'\n",
            " 'largely' 'obviously' 'refers' 'domestic/national' 'bastion' 'submerging'\n",
            " 'intimately' 'over-adrenalised' 'presidents' 'ministers' 'environmental'\n",
            " 'decay' 'damage' 'heal' 'scars' 'burgeoning' 'refugee/migrant' 'influxes'\n",
            " 'paradise']\n",
            "women: ['paint' 'welter' 'bold' 'humiliated' 'tamale' 'courtroom' 'surrounded'\n",
            " 'women-' 'mothers-' 'pored' 'hassle' '\"even' 'facet'\n",
            " '#ichh#retweet4support' 'gloomy' 'disabily' 'ghastly' 'overturned'\n",
            " 'felled' 'inserting' 'gagging' 'stench' 'igbuya' '24' 'rotting'\n",
            " 'triplett' 'sexually' 'pender' 'women.greg' 'airport' 'strewn'\n",
            " 'ayemidejor' 'prestige' 'results' 'austin' 'comments' 'aggressive'\n",
            " 'verdict' 'modifies' 'uncover' 'wet' 'windy' 'ladies' 'boards' 'salami'\n",
            " 'content' 'madam' 'attractive' 'behold' 'sickening' 'guilty' 'ladder'\n",
            " 'neighbour' 'stable' 'lion' 'mee' 'climbs' 'kinds' 'custom-made' 'shoes'\n",
            " 'scot-free' 'goods' 'elated' 'monash' 'lacks' 'appreciative'\n",
            " 'technologies' 'accelerate' 'highest' 'subjugating' 'perform' 'wear'\n",
            " 'chakma' 'kalpana' '5k' 'trendy' 'landing' 'prairie' 'sculpture' 'sapele'\n",
            " 'scarf' 'orange' 'ejaife' 'displays' 'manitoba' 'saskatchewan' 'odebala'\n",
            " 'shoe' 'grandmothers' 'unlike' 'regional' 'neal' 'jenny' 'silenced.'\n",
            " 'violently' 'doc' 'climb' 'incidents' 'violated' 'starphoenix']\n",
            "immigrant: ['nasty' 'generate' 'hoffman' 'alberta' 'self-made' 'mom' 'disclosure'\n",
            " 'hurt' 'melania' 'obstacle' 'bloomberg' 'kickstart' 'brutish' 'stranger'\n",
            " 'solitary' '85,000' 'industrialized' 'pieces' 'hobbes' 'thomas' 'cleaned'\n",
            " 'hats' 'borrowing' 'recognizes' 'historic' 'landline' 'worlds' 'rouge'\n",
            " 'metropolitan' 'retiring' 'billion' 'sidestepped' 'develops' 'baton'\n",
            " 'dreamer' 'flowing' 'sundress' 'barack' 'remittances' 'rose' 'previewed'\n",
            " 'outline' 'riot' 'obama' 'original' 'apparel' 'hurdle' 'insist' 'gordy'\n",
            " 'eva' 'quarantine' 'realizing' 'gateway' 'flow' 'bloc' 'cutting' 'buried'\n",
            " 'nurture' '1845-1852' 'evenly' 'youthful' 'staten' 'spoils' '30,000'\n",
            " 'offenders' 'slipped' 'wage' 'landed' 'nyc' 'senate' 'debated' 'approve'\n",
            " 'crossing' 'irishcentral' 'commemoration' 'deceived' 'reliant' 'fame'\n",
            " 'drummed' 'monuments' '790,000' 'mindful' 'foreigners' 'divided' 'eu'\n",
            " 'elites' 'concept' 'texas' 'remorse' 'humane' '//bit.ly/2ql25mv' 'http'\n",
            " 'immigrants/slaves' 'resentment' 'skilled' 'facsi' 'poor/low' 'hardcore'\n",
            " 'eac' 'sheer']\n",
            "hopeless: ['utter' 'gahn' 'taping' 'wildest' 'raged' 'flames' 'dazed' 'starving'\n",
            " 'wandered' 'alcoholism' 'inexorably' 'curl' 'tides' 'sherrie' 'palpable'\n",
            " 'fury' 'fulfilled' 'honourable' 'humanity' 'decadence' 'gory' '\"yet'\n",
            " 'properly' 'damned' 'pretty' 'invaluable' 'villains' 'maniacal'\n",
            " 'redeeming' 'feature' 'recognising' 'larry' 'joe' 'shone' 'admit'\n",
            " 'powerless' 'unmanageable' 'bbc' 'kiwis' 'asset' '1922' 'broadcaster'\n",
            " 'liberated' 'entertainment' 'birthplace' 'listened' 'bulletins'\n",
            " 'faithfully' 'prayed' 'principal' 'heavy' 'mentioning' 'confronting'\n",
            " 'extinguish' 'suicidal' 'samhsa' 'substance' '\"according' 'relate' 'avc'\n",
            " 'bazar' 'cox' 'distressed' 'characterized' '14th' '\"with' '\"lougene'\n",
            " 'lifestyle' 'lethargic' 'reclusive' 'withdrawn' 'depression' 'gutting'\n",
            " 'grieving' 'second-hand' 'weaknesses' 'hon' 'rimutaka' 'hipkins' '\"12'\n",
            " 'sinful' 'controlled' '8:9' 'romans' 'surrender' 'transforming'\n",
            " 'defeated' 'ocn' 'kick' 'trait' 'behavior' '\"many' 'malaise' 'mortality'\n",
            " 'infant' 'expectancies' 'qualitatively' 'quantitatively' 'developing'\n",
            " 'leering']\n"
          ]
        }
      ],
      "source": [
        "result = calculate_keyword_pmi(posdf)\n",
        "for keyword in keywords:\n",
        "  pmis, words = result[keyword]\n",
        "  values, indices = torch.topk(torch.Tensor(pmis), 100)\n",
        "  print(f\"{keyword}: {np.array(words)[indices]}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-WIdevBWLZFt",
        "outputId": "d9af2c1f-65c5-47f4-f810-30828b0649a6"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "7044 42496\n",
            "sg\n",
            "886 2103\n",
            "my\n",
            "702 1791\n",
            "hk\n",
            "380 752\n",
            "lk\n",
            "1032 2719\n",
            "ie\n",
            "740 1804\n",
            "ca\n",
            "783 1879\n",
            "jm\n",
            "890 2356\n",
            "ng\n",
            "1206 3467\n",
            "pk\n",
            "998 2458\n",
            "nz\n",
            "533 1192\n",
            "gh\n",
            "1177 3360\n",
            "tz\n",
            "619 1549\n",
            "au\n",
            "807 1937\n",
            "za\n",
            "946 2395\n",
            "us\n",
            "788 1949\n",
            "in\n",
            "877 2000\n",
            "ke\n",
            "626 1369\n",
            "ph\n",
            "1092 2847\n",
            "bd\n",
            "891 2071\n",
            "gb\n",
            "1018 2498\n",
            "sg: ['dot' 'fostering' 'selflessly' 'commend' 'marriages' 'strengthening'\n",
            " 'chuan-jin' 'tan' 'apathetic' 'ms' 'heartened' 'chen' 'serene' 'ocn'\n",
            " 'principles' 'vicki' 'treadell' 'fundamentally' 'ogp' 'opener' 'ignored'\n",
            " 'experiencing' 'madhu' 'shoot' 'story\"' 'endure' 'adult' 'nevertheless'\n",
            " 'films' 'manages' 'entirely' 'tulasi' 'krishna' 'thankfully' 'advance'\n",
            " 'trope' 'maniacal' 'darker' 'weird' 'heroine' '*sigh' 'bullying'\n",
            " 'disappointing' 'majesty' 'commonwealth' 'points' 'rascals' 'swear'\n",
            " 'horrifying' 'madhusudhan' 'real-life' 'banning' 'ryan' 'shooting'\n",
            " 'remainder' '\"ryan' 'severe' 'decisions' 'repeatedly' 'shifting' 'chuan'\n",
            " 'toh' 'manpower' 'bump' '\"from' 'competition' 'mexico' 'sneakers'\n",
            " 'co-founded' 'profit' 'innersole' '$25,000' 'apology' 'elizabeth'\n",
            " 'stemmed' 'policeman' 'digi' 'roadshow' 'yellow' 'ads' 'journal' '11am'\n",
            " '9pm' 'accolades' 'bedok' 'earning' 'mall' 'villains' 'basement'\n",
            " 'approaching' 'cash-rich' 'cumbersome' 'atrium' 'releasing' 'rescinding'\n",
            " 'fearful' '800,000' 'precarious' 'stocks' 'gold']\n",
            "my: ['ramadan' 'nazrin' 'perak' 'wednesdays' 'sultan' 'kl' 'krash' 'pad' '346'\n",
            " 'jalan' 'tuanku' 'rahman' 'ipoh' 'muizzuddin' 'draws' 'integration'\n",
            " 'wherein' 'endangered' 'sanctuaries' 'guaranteeing' 'rolheiserwhenever'\n",
            " 'possibility' 'rol' 'instruction' 'mctell' 'institut' 'slippers' 'verb'\n",
            " 'trendy' 'kinds' 'custom-made' 'outcasts' 'whipped' 'incarcerated'\n",
            " 'deported' 'modifies' 'retorts' 'collaboration' 'performs' 'onn'\n",
            " \"ja'afar\" 'ioj' 'yayasan' 'yck' 'invites' 'malaysians' 'breakfast'\n",
            " '\"pointing' '7am' 'operate' 'capitalism' 'convinced' 'laborers' 'suburbs'\n",
            " 'yahweh' 'covenant' 'sycc' 'inviting' 'communal' 'patents' 'symbols'\n",
            " 'rafizi' 'supporters' 'corruption' 'najib' 'nain' 'resurrection' 'luke'\n",
            " 'gospel' 'razak' 'commenting' 'marta' 'santa' 'casa' 'angels'\n",
            " 'companions' 'choir' 'kit' 'chow' 'guest' 'vocalist' '\"saturdays'\n",
            " 'cautious' 'lennox' '4,000' 'frances' 'cabrini' 'abilities'\n",
            " 'unemployable' 'involves' 'dioceses' 'parishes' 'institutes'\n",
            " 'consecrated' 'blocked' 'associations' 'movements' 'unionists' 'inhumane'\n",
            " 'twentyfifth']\n",
            "hk: ['summit' 'blame' 'furzer' 'salman' 'quoted' 'upworthy' 'chan'\n",
            " 'story-sharing' 'vermin' 'carrying' 'urging' 'inset' 'leung' 'cy'\n",
            " 'activists' 'fault' 'it.' 'demanding' 'reins' 'connects' 'govt' 'wong'\n",
            " 'wai' 'provid' 'hk$20' 'assisting' 'rthk' 'surplus' 'sheung' 'holiday'\n",
            " 'food-co' 'shortcomings' 'pathfinders' 'credits' 'accomplishments'\n",
            " 'harmonious' 'hurdle' 'sponsoring' 'streamed' '....' 'television' 'tons'\n",
            " 'faith-based' 'meat' 'buffalo' 'feasted' 'mosques' 'deadliest' 'sla'\n",
            " 'iran' 'kong-born' 'equine' 'praying' 'iranians' 'counselors' 'al-adha'\n",
            " 'sprawling' 'eid' 'osteria' 'imaginative' 'mouths' 'redirect' '\"smyth'\n",
            " 'pairs' 'hkfp' 'devised' 'moderna' 'francescana' 'interacting'\n",
            " 'three-michelin-starred' 'horses' 'intervention' 'massimo' 'bottura'\n",
            " 'trip' 'hong' 'reuters' 'invigorating' 'non-governmental' 'woes' 'kong'\n",
            " '\"mr.' 'kingdom' 'website' 'facebook' 'opponents' 'cars' 'citing'\n",
            " 'reports' 'stress' 'earthquake' 'candidate' 'makeshift' 'myanmar' 'hopes'\n",
            " 'participating' '450' '\"in' 'celebrating' '200']\n",
            "lk: ['societies' 'retiring' 'familiarity' 'yearns' 'assimilated' 'outsider'\n",
            " 'downtrodden' 'standard' 'accustomed' 'gains' 'ideas' 'develops' 'rulers'\n",
            " 'original' 'metropolitan' 'worlds' 'purloin' 'attain' 'nibbana' 'unaware'\n",
            " 'wenceslas' 'symptomatic' 'l.' 'dinu' 'one-sided' 'liberty' 'shot'\n",
            " 'ruined' 'heavily' 'limbs' 'sacrificed' 'e.' 't.' 'losers' 'tones'\n",
            " 'birthdays' 'residential' 'loans' 'grave' 'synonymous' 'galore' 'sri'\n",
            " 'lanka' '\"dinu' 'unholy' 'dictate' 'necessity' 'valiant' 'freedom'\n",
            " 'cannon' 'befriending' 'analysts' 'immensely' 'imagination' 'plots'\n",
            " 'understands' 'morale' 'integrity' 'man-made' 'crises' 'echo' 'pretext'\n",
            " 'accommodation' 'restoring' 'craftily' 'adopt' 'premadasa' 'western'\n",
            " 'sajith' 'philanthropic' 'approaches' 'exporting' 'lands' 'eco-friendly'\n",
            " 'forcibly' 'haughty' 'trick' 'escaped' 'relative' 'conviction' 'contents'\n",
            " 'verse' 'col' '4:2' 'earnestly' 'vigilant' 'robber' 'personality' 'kiss'\n",
            " 'orthodox' 'hindu' 'handful' 'bhikkhunis' 'bhikkhuni' 'lekshe' 'crust'\n",
            " 'realise' 'second-class' 'equip' 'sung']\n",
            "ie: ['habit' 'email' 'parks' 'rosa' 'beset' 'everyday' 'tedious' 'modesty'\n",
            " 'harmful' 'self-esteem' 'cultural' 'full-blown' 'self-deprecation'\n",
            " 'bernie' 'and/or' 'dysmorphia' 'candidates' 'her.ie' 'depression'\n",
            " 'animal' 'staring' 'straight' 'barrel' 'raw' 'objective' '3.500'\n",
            " '24-hour' 'accents' 'lethargic' 'reclusive' 'withdrawn' 'hotline'\n",
            " 'bubble' '\"homeless' 'tenement' 'mushatt' 'injustices' 'gang' 'emotes'\n",
            " 'basketball' 'chicago' 'surviving' 'treats' 'homeland' 'subtext'\n",
            " 'finished' 'owners' 'dared' 'boutique' 'asking' '\"psni' 'connection'\n",
            " 'characterised' 'laois' '#ichh#retweet4support' 'circle' 'whereby'\n",
            " 'limits' 'obstructs' 'windy' 'wet' 'low-quality' 'trap' 'chill'\n",
            " 'constable' 'hamilton' 'drew' 'harris' 'bless' 'seifeddine' '\"local' 'td'\n",
            " 'derek' 'keating' 'celebration' 'irish' 'realities' 'soul' 'cries'\n",
            " 'tear-filled' 'booth' 'johannah' 'uncommon' 'minority' 'patron' 'leagues'\n",
            " 'hurt' 'danger' 'valid' 'politician' 'stranger' 'guinness' '540lbs'\n",
            " '7-layer' 'insist' 'munchy' 'monstrosity' 'la' 'midnight' 'lifestyle']\n",
            "ca: ['ndp' 'considers' 'suhonen' '\"but' 'spouse' 'heartsick' 'sherrie'\n",
            " 'ambitious' 'trauma-related' 'accused' 'dewar' 'critic' 'burning'\n",
            " 'shell-shocked' 'sichuan' 'portals' 'rebels' 'mustered' 'altar' 'honor'\n",
            " 'lavigne' 'avril' 'behave' 'throats' 'exhilarated' 'pass' 'pro'\n",
            " 'liberals' 'debate' 'principal' 'democrats' 'wallet' 'maclean'\n",
            " 'documentation' 'reasons' 'canadian' 'inequalities' 'busker' 'belt'\n",
            " 'winnipeg' 'alpo' 'canadians' 'shamelessly' 'lied' 'terrorist' 'raft'\n",
            " 'rubber' 'gahn' 'parent' 'gazan' 'demonstrated' 'summer' 'working-class'\n",
            " 'north-west' 'bramalea' 'toronto' 'somewhat' 'upbringing' 'putting'\n",
            " 'recreation' 'shortages' 'fridays' 'gamely' 'kang' 'wide' 'hard-working'\n",
            " 'gaps' 'sandwiches' 'gordy' 'seventies' 'eva' 'yoga' 'hoffman' 'mathur'\n",
            " 'starphoenix' 'images' 'socio-economic' 'palauig' 'tab' 'osoyoos'\n",
            " 'landowner' 'renovated' 'spoil' 'aleppo' 'haiti' 'bombed-out'\n",
            " 'providence' 'accepting' 'temple' 'blown' '\"teach' 'windows' 'littered'\n",
            " 'decano' 'gutted' 'sitting' 'lunchtime' 'cigarettes' 'a.' 'lawsuit']\n",
            "jm: ['nehemiah' 'actualise' 'prestige' 'motivated' 'ayesha' 'sidewalk'\n",
            " 'passers-by' 'allen' 'cumi' 'rescuing' 'taxes' 'creator' 'ja' '31'\n",
            " 'championing' 'portland' 'hopeful' 'spread' 'widely' 'figured'\n",
            " 'jamaicans' 'afloat' 'grabbing' 'capsized' 'smuggler' 'newborn' 'miracle'\n",
            " 'commended' 'expertise' 'calendar' 'cochetel' 'kettle' 'commentary' 'wo'\n",
            " 'custos' 'corrodus' 'crooks' 'appealing' 'overboard' 'issuing' 'tutu'\n",
            " 'evening' 'busy' 'hassle' 'attractive' 'rings' 'content' 'boards'\n",
            " 'corporations' 'conglomerates' 'tendencies' 'deterioration' 'amplify'\n",
            " 'blaine' 'betty-ann' 'negotiators' 'broader' 'balance' 'aggression'\n",
            " 'heartless' 'stakeholders' 'japan' 'korea' 'instability/shifting'\n",
            " 'mechanisms' 'perceive' 'faceless' 'nameless' 'careless' 'informed'\n",
            " 'variety' 'consultations' 'stakeholder' 'negril' 'haves' 'appreciative'\n",
            " 'pitched' 'rescuers' 'bothered' 'jamaica' 'traversing' 'home\"' 'funeral'\n",
            " 'clothed' 'drink' 'spared' 'principle' 'desmond' 'ashamed' 'excel'\n",
            " 'selfish' 'karate' 'examined' 'medically' 'removed' 'relevant'\n",
            " 'inspector' 'factors' 'dismal' 'ffp']\n",
            "ng: ['otoyo' '\"another' '17-year-old' 'rebel' 'underneath' 'bridge' '2011'\n",
            " 'gates' 'sub-saharan' 'chickens' 'knitting' 'bold' 'narrative' 'fond'\n",
            " 'surrounded' 'treatments' 'supreme' 'defenceless' 'bonnie' 'monroe'\n",
            " 'settled' 'wards' 'ate' 'compound' 'chased' 'eaten' 'allegedly'\n",
            " 'babachir' 'perspiration' 'boarding' 'cheeks' 'folks' 'plying' 'chaotic'\n",
            " 'teenager' 'kindest' 'dad' 'fence' 'managerial' 'samuel' 'peers'\n",
            " 'importuned' 'scorching' 'eke' 'mosque' 'globe' 'seun' 'cherish' 'fola'\n",
            " 'jin' 'fake' 'bridges' 'comforted' 'broken-hearted' 'elaborate'\n",
            " 'pensioners' 'rule' 'showcased' 'artisans' 'pavegen' 'hoi-polloi'\n",
            " 'enslaves' '99%' 'badagry' 'hausa' 'unbelievers' 'yoruba' 'fraternizing'\n",
            " 'igbo' 'kinetic' 'ijaw' 'igbira' 'tiv' 'tiles' 'idoma' 'mattresses'\n",
            " 'tour' 'editors' 'trekking' 'popularity' 'lay' 'contemplated' 'harcourt'\n",
            " 'trooped' 'tishbite' 'elijah' 'prophet' 'intensity' 'fondly' 'mats'\n",
            " 'organizational' 'connecting' 'wike' 'bcya' 'boulders' 'doubles'\n",
            " 'honfovu' 'denagan' 'comrade' 'environments']\n",
            "pk: ['positivity.' '73' '36.5' 'injured/disabled' '129' '25.6' 'martyrs' '39'\n",
            " '105.01' 'approval' 'formal' 'accorded' 'details' 'partially'\n",
            " 'extricating' 'producing' 'insecure' 'persists' 'rha' 'brilliant'\n",
            " 'leftover' 'locality' 'produced' 'memorable' 'swimmers' 'shaped' 'fao'\n",
            " 'qaim' 'syed' 'sindh' 'karachi' 'deprive' 'advertised' 'averaging' 'ali'\n",
            " 'partition' 'accompanied' 'massacres' 'yusra' 'post-independence'\n",
            " 'bargaining' 'masses' 'iqbal' 'azhar' 'raja' 'ispr' 'spokesperson/dg'\n",
            " 'ajk' 'shelling' 'damaged' 'prestigious' 'faint' 'blaring' 'mayhem'\n",
            " 'forces' '\"during' 'peef' 'scholars' 'talented' 'hardworking' 'realized'\n",
            " 'equipping' 'admission' 'altaf' 'cm' 'confronting' '6' 'sattar' 'edhi'\n",
            " 'afp' 'request' '\"film' 'reema' 'iftar' 'flood' 'flew' 'mardini' 'ramis'\n",
            " 'anis' 'medals' '\"islamic' 'simone' 'biles' 'gymnastics' 'thrill' 'usain'\n",
            " 'bolt' '8th' 'finish' 'sporting' 'bowed' 'competitors' 'stepped'\n",
            " 'thrilling' 'performances' 'burst' 'pellets' 'twenty-year-old' 'omar'\n",
            " 'widespread']\n",
            "nz: ['christchurch' 'inquiry' 'pretty' 'outcome' 'damned' 'missioner'\n",
            " 'alternatives' 'properly' 'drop' 'eruera' 'blithesome' 'stadia' 'epuni'\n",
            " 'kiwis' 'ratepayers' 'gods' 'unaffordable' 'time-poor' 'implications'\n",
            " 'baptist' 'unattractive' 'rotorua' 'klosen' 'unfaltering' 'respite'\n",
            " 'alun' 'guide' 'rimutaka' 'realised' 'damp' 'clayton' 'hon' 'zealanders'\n",
            " 'passively' 'hipkins' 'emotions' 'box' '\"12' 'intervene' 'tauranga'\n",
            " 'purchase' 'likely' 'sickness' 'inspirational' 'proudest'\n",
            " 'accountability' 'range' 'ambition' 'doorstep' 'gorman' 'charged'\n",
            " 'deserving' 'antidote' 'beaten' 'start-up' 'pulitzer' 'change-makers'\n",
            " 'cois' 'sharks' 'loan' 'ocr' 'relation' 'zones' 'clients' 'underutilised'\n",
            " 'limiting' 'journalism' 'prize-winning' 'stuff' 'journalist' 'owned'\n",
            " 'swathes' '1st' 'gutman' 'roy' 'adulthood' 'commit' 'tampons' 'plead'\n",
            " 'canberra' 'able-bodied' 'melbourne' 'cotton' 'unscrupulous' 'nottle'\n",
            " 'ding' 'amy' 'zealand' '\"helen' 'schafer' 'belief' 'nurse' '\"chinese'\n",
            " 'defends' 'pm' 'preying' 'isaac' 'subscription' 'battered' 'architect']\n",
            "gh: ['increase' 'missions' 'gaza' 'emperor' 'zamfara' 'malam' 'wakkala'\n",
            " 'implement' 'campbell' 'refrain' '\"mrs' 'abayage' 'gradual' 'empowering'\n",
            " 'representation' 'meets' 'politics' 'indication' 'capabilities' 'advised'\n",
            " 'shamefully' 'uploaded' 'assali' 'berlin' 'familiar' 'trace' 'behaviors'\n",
            " 'racism' 'hatred' 'normally' 'affecting' 'extensively' 'davutoglu'\n",
            " 'midweek' 'gig' 'ngo' 'inaugurated' 'roaming' 'caption' 'towns' 'overall'\n",
            " 'unavailability' 'delivery' 'can-do' 'inculcating' 'enslaved'\n",
            " 'under-privileged' 'forks' 'tlf' 'afflicted' 'immense' 'seven-figure'\n",
            " 'revamp' 'depth' 'arrest' 'benefitting' 'addo/bawumia' 'nana' 'hustling'\n",
            " 'scam-artist' 'rump-cpp' 'abjectly' 'greenstreet' 'launching' 'voted'\n",
            " 'substantive' 'designer' 'especial' 'endlessly' 'mouth' 'barack' 'ghana'\n",
            " 'couture' 'sidestepped' 'expressions' 'imbued' 'mans' 'german' 'notion'\n",
            " 'azumah' 'disabused' 'injected' 'akuse-based' 'blessing' 'scriptures'\n",
            " 'hinted' 'equals' 'sends' 'teachings' 'crisafulli' 'bosco' 'fambul'\n",
            " 'halfway' 'sierra' 'leoneans' 'nightmare' 'washington' 'billionaire'\n",
            " 'koch' 'triggered']\n",
            "tz: ['cupboard' 'ipp' 'convener' 'malnutrition' 'administrator' 'partalala'\n",
            " 'alfonso' 'elsewhere' 'malaria' 'kwieco' 'mtabila' 'burundian' '34,052'\n",
            " 'meitaya' 'boasts' 'undies' 'dignified' 'orderly' 'lavish' 'lifestyles'\n",
            " 'mosquito' 'bite-and' '1-5' 'immigrants/slaves' 'curry' 'es' 'origins'\n",
            " 'trousers' 'japanese' 'helfrich' 'colour' 'bloc' 'nurture'\n",
            " 'complementing' 'compelled' 'u.s' 'neighbours' 'dar' 'extreme'\n",
            " 'increasing' 'salaam' 'parliaments' 'amenities' 'psychological' 'bank'\n",
            " 'ucrt' 'reproductive' 'lenhardt' 'tolls' 'baps' 'citizen' 'emulated'\n",
            " 'usefulness' 'frail' 'type' 'effects' 'resultant' 'roles' '75'\n",
            " 'approximately' 'secondary' 'subjecting' 'climbing' 'summits' 'admit'\n",
            " 'pinnacle' 'ditch' 'zeal' 'diligence' 'planning' 'adds' 'thrilled'\n",
            " 'unmanageable' 'powerless' 'germany' 'temporarily' 'gloomy' 'humane'\n",
            " 'vehicles' 'evros' 'remorse' 'concept' 'et' 'cetera' 'paint' 'cover'\n",
            " 'wallow' 'shelf' 'rwandese' 'italy' 'counseled' 'congratulating'\n",
            " 'mothers-' 'persecution' 'wave' 'slow' 'costs' 'women-' 'oblivious'\n",
            " '30,000']\n",
            "au: ['bombers' 'melissa' 'captains' 'suspected' 'roadblocks' 'absent' '\"most'\n",
            " 'outrage' 'horn' 'tens' 'treacherous' 'teenage' 'war-torn' 'millard'\n",
            " 'indoctrinated' 'madrassa' 'raises' 'gulf' 'detained' 'yemeni' 'await'\n",
            " 'likes' 'execution' 'warehouse' 'crushed' 'draft' 'delete' '500'\n",
            " 'philanthropy' 'celebrity' 'beijing' 'cena' 'unfamiliar' 'territory'\n",
            " 'john' 'ends' '400' 'agreement' 'exiled' 'ratification' 'inches' 'swap'\n",
            " 'donates' 'proposed' 'gillard' 'instagram' 'getty/instagram' 'intention'\n",
            " 'supporter' 'dress' 'pleads' 'route' 'unsafe' 'descended' 'elephant'\n",
            " 'all-out' 'drown' 'appear' 'tow' 'perilous' 'multiple' 'assault'\n",
            " 'extortion' 'growths' 'criminal' 'drunken' 'networks' 'leicester'\n",
            " 'industrial' 'smokey' 'conjured' 'misfortune' '19th' 'stemming'\n",
            " 'landline' 'beneath' 'nauru' 'manus' 'basic' 'djibouti' 'rejects' 'tout'\n",
            " 'amounts' 'freak' 'wing' 'declined' 'deport' 'schools\"' 'journeys'\n",
            " 'arabian' 'gravitas' 'peninsula' 'transit' 'lending' 'monks' 'daniel'\n",
            " 'predecessor' 'historical' 'deformities' 'placing']\n",
            "za: ['diary' 'kandaro' 'desiree' 'kapira' 'boipelo' 'correct' 'curse' 'monash'\n",
            " 'doc' 'organ' 'transplants' 'staying' 'game' 'ludi' 'entry' 'fourth'\n",
            " 'lifespan' 'column' 'coping' 'oosthuizen' 'danny' '\"london' 'angelia'\n",
            " 'unite' '\"some' 'inferior' 'captures' 'crushing' 'shock' 'mackinnon'\n",
            " 'disorder' 'agust' 'laura' 'anthropologist' 'blackie' 'rhetoric'\n",
            " 'struggled' 'universities' '15-part' 'portuguese' 'lifelong' 'shape'\n",
            " '$83,000' '10-year-old' 'surgery' 'obesity' 'biodiversity' 'rapid' 'n'\n",
            " 'kakuti' 'wears' 'esteem' 'rife' 'yusuf' 'warring' 'infringe'\n",
            " 'unconsciously' 'unfavourable' 'afghanistan/afp' 'mahdy' 'mehraeenafghan'\n",
            " 'murtaza' 'ahmadi' 'self-obsession' 'jerseys' 'idol' 'lionel' 'duration'\n",
            " 'sentries' 'messi' 'afghan' 'captivated' 'pictured' 'proudly' 'shellhole'\n",
            " 'reign' 'r1' '#thedignityproject' 'somtaki' 'editorial' 'collaborative'\n",
            " 'argus' 'cape' 'explains' 'shumugum' 'missionary' 'senseless' 'xoyo'\n",
            " 'gangsters' 'fibre' 'freed' 'overstatement' 'sanco' 'jabu' 'mahlangu'\n",
            " 'degenerated' 'pity' 'wallowing' 'muddy' 'catherine']\n",
            "us: ['poised' 'capture' 'nurses' 'salons' 'brightest' 'hiv' 'importing' 'bush'\n",
            " 'jeb' 'high-flying' 'discuss' \"'d\" '$47' 'tawdry' 'forthcoming' 'aging'\n",
            " 'seattle' 'ages' 'boosting' '17%' 'strictly' 'cheese' 'maine' 'staples'\n",
            " 'usda' 'ahcccs' '20-something' 'wives' 'met' 'acknowledge' 'ablow'\n",
            " 'overmedication' 'abuses' 'transgendered' 'repair' 'void' 'turning'\n",
            " '\"2015' 'pantries' 'bills' 'tax' 'long-term' 'parallels' 'apparently'\n",
            " 'year-old' 'lawlessness' 'upsetting' 'islands' 'falling' 'capitol'\n",
            " 'relate' 'thirty-eight' 'stamps' 'palestinians' 'receives' 'forty-seven'\n",
            " '\"poverty' 'futures' 'devoid' 'avc' 'specialist' 'family-development'\n",
            " 'qualify' 'divided' 'understandable' '\"dreamers' 'utterly' 'incredibly'\n",
            " 'avoid' 'ravaged' 'siouxland' 'grips' 'ciera' 'dunlap' 'throes'\n",
            " 'improved' 'kitchens' 'allows' 'superpower' 'nutter' 'affording' 'eating'\n",
            " 'humbling' 'grinding' 'kretsge' 'departments' 'disgrace' 'tefap' 'facts'\n",
            " 'whitehead' 'philadelphians' 'roofs' 'formerly' 'veterans' '58,000'\n",
            " 'closely' 'pause' '1.2' '790,000' 'sasha']\n",
            "in: ['s/he' 'interaction' 'burundi' 'cbse' 'eliminate' 'segregation' 'replace'\n",
            " 'jac' 'prayas' 'kanth' 'amod' 'wont' 'segregated' 'malala' 'dusib' 'rai'\n",
            " 'bipin' 'benchmark' 'ideal' 'death-fields' 'spring' 'pashtun' 'appeared'\n",
            " 'flag' 'thronged' 'fraction' 'redeemed' 'drops' 'rj' 'tokens' 'arranging'\n",
            " 'eateries' 'masjid' 'jama' 'nizamuddin' 'ghettoes' 'newspapers'\n",
            " 'earnings' 'lagono' 'require' 'electrification' 'sects' 'jain' 'mandsaur'\n",
            " 'relying' 'pickups' 'associating' 'attained' 'enhancing' 'utkaliya' 'bsf'\n",
            " 'correctional' 'bengal' 'refuse' 'yemenis' 'dwindling' 'bhopal'\n",
            " 'wholesale' 'sowing' '9f' 'notorious' 'narendra' 'modi' 'expenses'\n",
            " 'notkers' 'theatre' 'bd' 'sharma' 'innumerable' '21' 'rani' 'guarding'\n",
            " 'billionare' 'egypt' 'bgb' 'window' 'ustav' 'murdered' 'cold-bloodedly'\n",
            " 'ghmc' 'alluring' 'fascinating' 'samhua' 'aspiring' 'rajendranagar'\n",
            " 'handsome' 'footwear' 'shgs' 'plumetted' 'zone' 'jihad' 'barbarities'\n",
            " 'except' 'phases' 'brutalising' 'onions' 'divisive' 'destructive'\n",
            " 'torturous' 'inexorably']\n",
            "ke: ['occurrences' 'bare-foot' 'baringo' 'livestock' 'swept' 'pokot' 'bandits'\n",
            " 'idp' 'investors' 'lamu' 'all-inclusive' 'obbo.\"' 'shillings' 'kabarak'\n",
            " 'evidence' 'milling' 'disheveled' 'drove' 'eldoret' 'colonialists'\n",
            " 'forefathers' 'existing' 'kenyans' 'shoulder' 'mock' 'directors'\n",
            " 'revenge' 'nudging' 'monica' 'earned' 'luise' 'kiambu' 'flagship'\n",
            " 'healing' 'surgeries' 'rania' 'irc' 'distinguished' 'pregnancy'\n",
            " 'miliband' 'extraordinary' 'distinctive' 'viewpoint' 'locals' 'copy'\n",
            " 'paste' 'innovations' 'grow' 'dynamic' 'moi' 'cmt' 'boss' 'commission'\n",
            " 'approved' 'redistributed' 'volumes' 'consumption' 'perfectly' 'commerce'\n",
            " 'unfit' 'fruits' 'organizations' 'bulgarian' 'dependency' 'central'\n",
            " 'purely' 'insisted' 'dennis' 'rail' '80' 'garlands' 'decorated' 'laid'\n",
            " 'pose' 'shuttling' 'gutting' 'nairobi' 'kneeling' 'passerby'\n",
            " 'representative' 'shebesh' 'disillusionment' 'macroeconomics' 'gongera'\n",
            " 'peanuts' 'labourers' 'casual' 'arise' 'grieving' 'second-hand'\n",
            " 'supermarket' 'gikomba' 'despondency' 'summed' 'kaveke' 'teary'\n",
            " 'frustration' 'dejection' 'apathy' 'sr']\n",
            "ph: ['garfield' '470' 'waters' 'drifting' 'helicopter' 'directing' 'thai'\n",
            " 'rotting' 'stench' 'gagging' 'felled' 'overturned' 'strewn' 'tacloban'\n",
            " 'claire' 'foy' 'pagdilao' 'picking' 'ted' 'breadwinners' 'patrol'\n",
            " 'cyclists' '7,464' 'manila' 'metro' 'v.' 'captive' 'ailing' 'davao'\n",
            " 'lasallian' 'unconquered' 'pineapple' '1994' 'reminding' '18,000-hectare'\n",
            " 'plantations' 'mindanao' 'fidel' 'drama' 'ramos' 'ancient' 'inc.'\n",
            " 'proclamation' 'archambault/afp' 'christophe' '14' 'no.' 'andaman' 'lipe'\n",
            " 'koh' 'glimpses' 'exhilaration' 'geography' 'unconditional' 'discovery'\n",
            " 'envelops' 'envoy' 'angelina' 'makati' 'certified' 'inquirer' 'qualified'\n",
            " 'read-along' 'mathematics' 'lebanese' 'lima' 'ascribe' 'frailties'\n",
            " 'remark' 'televised' 'limitless' 'filipino' 'ruled' 'admitting' 'dayan'\n",
            " 'marcos' 'ang' 'continuous' 'malaca' '\"de' 'guzman' 'requirement'\n",
            " 'landless' 'devotes' 'benefited' '293' 'decree' 'matina' 'ferdinand'\n",
            " 'kadamay' 'non-action' 'originally' 'rizal' '\"pangarap' 'beirut' 'tanay'\n",
            " '\"courses' 'revitalizes' 'greek' 'suggestions']\n",
            "bd: ['personification' '16xosu' 'narayanganj' 'cantonment' 'ghatail' '\"sm'\n",
            " 'hassan' 'siddiquee' 'proclaimed' 'pool' 'modernisation' 'globalisation'\n",
            " 'saint' 'largely' 'maternal' 'sofia' '1,500' 'looked' 'eloquent'\n",
            " 'debates' 'controversies' 'accelerate' 'technologies' 'gdp' 'stable'\n",
            " 'crp' 'instilled' 'cox' 'heavy' 'injuries' '14th' 'heroic' '\"with'\n",
            " 'admires' 'bazar' 'perspectives' 'mark' 'satkhira' 'sheikh' 'hold'\n",
            " 'grand' 'context' 'triplett' 'dhaka' 'tribune' 'removing' 'barriers'\n",
            " 'davos' 'cultivate' 'responsive' 'tenacious' 'maas' 'unleash'\n",
            " 'uncontrollable' 'chain' 'adults' 'differently-abled' 'unrwa'\n",
            " 'classrooms' 'scenarios' 'persistent' 'exclusion' 'peaceful' 'granting'\n",
            " 'coexistence' 'impossible' 'unstable' 'appears' 'whatever' 'designed'\n",
            " 'needless' '2004' 'humiliating' 'neistat' 'describing' 'poor/low'\n",
            " 'turn-out' 'voting' 'hasina' 'wage' 'spoils' 'evenly' 'resort' 'cutting'\n",
            " 'flow' 'burdened' 'inconceivable' 'salahuddin' 'skilled' 'resentment'\n",
            " 'elites' 'eu' 'foreigners' 'billion' 'dreamer' 'previewed' 'outline'\n",
            " '17.6' 'pounds' 'patronised']\n",
            "gb: ['behold' 'befriend' 'pored' 'modernise' 'sphere' 'facet' 'via' 'kate'\n",
            " 'liverpool' 'humiliated' 'pepe' 'divides' 'opinion' 'courtroom'\n",
            " 'portugal' 'unleashed' 'verdict' 'evans' 'defender' 'samaritan' 'swill'\n",
            " 'toxic' 'ched' 'entitled' 'rozas' 'nursery' 'asset' 'invaluable' '1922'\n",
            " 'respecting' 'addressed' 'woking' 'theology' 'dwelt' 'cygnet'\n",
            " 'intimately' 'parted' 'rhymes' 'endorsing' 'prize' 'metaphorically'\n",
            " 'pull' 'foster' 'carer' 'regulators' 'lie' 'sickening' 'welter' 'breath'\n",
            " 'anonymous' 'rock' 'accumulating' 'gaunt' 'haggard' 'burma' 'dough'\n",
            " 'assam' 'shouldered' 'spare' 'wooden' 'leg' 'lest' 'smashed' 'pitiful'\n",
            " 'exhausted' 'worn' 'crawled' 'watching' 'cheerfully' 'paralympians' 'pet'\n",
            " 'detract' 'spaniel' 'cliff' 'gurkha' 'innovators' 'spanish' 'jewish'\n",
            " 'neighbourhood' 'sulaymaniah' 'right-thinking' 'kurdish' 'docklands'\n",
            " 'dutch' 'crammed' 'grandeur' 'van' 'ghastly' 'concealed' 'layer' 'grit'\n",
            " 'sorts' '\"there' 'astonishing' 'tales' 'douglas' 'reported' 'epic'\n",
            " 'shapps' 'bbc']\n"
          ]
        }
      ],
      "source": [
        "result = calculate_country_pmi(posdf)\n",
        "for country in countries:\n",
        "  pmis, words = result[country]\n",
        "  values, indices = torch.topk(torch.Tensor(pmis), 100)\n",
        "  print(f\"{country}: {np.array(words)[indices]}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Y7ppXEnmfFHL"
      },
      "source": [
        "#Data analysis of negative samples"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 423
        },
        "id": "jAcBjVDdfHfe",
        "outputId": "2af5536c-798e-4c0e-8581-f770ac12e1df"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "\n",
              "  <div id=\"df-4d793800-e147-4bc1-9ac6-f5f46502dbae\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>par_id</th>\n",
              "      <th>art_id</th>\n",
              "      <th>keyword</th>\n",
              "      <th>country</th>\n",
              "      <th>text</th>\n",
              "      <th>label</th>\n",
              "      <th>orig_label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>794</th>\n",
              "      <td>1</td>\n",
              "      <td>@@24942188</td>\n",
              "      <td>hopeless</td>\n",
              "      <td>ph</td>\n",
              "      <td>We 're living in times of absolute insanity , ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>795</th>\n",
              "      <td>2</td>\n",
              "      <td>@@21968160</td>\n",
              "      <td>migrant</td>\n",
              "      <td>gh</td>\n",
              "      <td>In Libya today , there are countless number of...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>796</th>\n",
              "      <td>3</td>\n",
              "      <td>@@16584954</td>\n",
              "      <td>immigrant</td>\n",
              "      <td>ie</td>\n",
              "      <td>\"White House press secretary Sean Spicer said ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>797</th>\n",
              "      <td>4</td>\n",
              "      <td>@@7811231</td>\n",
              "      <td>disabled</td>\n",
              "      <td>nz</td>\n",
              "      <td>Council customers only signs would be displaye...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>798</th>\n",
              "      <td>5</td>\n",
              "      <td>@@1494111</td>\n",
              "      <td>refugee</td>\n",
              "      <td>ca</td>\n",
              "      <td>\"\"\" Just like we received migrants fleeing El ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2089</th>\n",
              "      <td>1459</td>\n",
              "      <td>@@1166455</td>\n",
              "      <td>immigrant</td>\n",
              "      <td>ca</td>\n",
              "      <td>Walking down the street in Montreal , I am str...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2090</th>\n",
              "      <td>1460</td>\n",
              "      <td>@@20605972</td>\n",
              "      <td>disabled</td>\n",
              "      <td>ph</td>\n",
              "      <td>The Indians ' two-time All-Star second baseman...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2091</th>\n",
              "      <td>1461</td>\n",
              "      <td>@@14812450</td>\n",
              "      <td>migrant</td>\n",
              "      <td>hk</td>\n",
              "      <td>Australia currently takes immigrants with a Si...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2092</th>\n",
              "      <td>1462</td>\n",
              "      <td>@@1193000</td>\n",
              "      <td>migrant</td>\n",
              "      <td>hk</td>\n",
              "      <td>In another sign that labor markets remain rela...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2093</th>\n",
              "      <td>1463</td>\n",
              "      <td>@@13673995</td>\n",
              "      <td>disabled</td>\n",
              "      <td>pk</td>\n",
              "      <td>During his stay in Italy , he remained working...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>1300 rows × 7 columns</p>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-4d793800-e147-4bc1-9ac6-f5f46502dbae')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-4d793800-e147-4bc1-9ac6-f5f46502dbae button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-4d793800-e147-4bc1-9ac6-f5f46502dbae');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ],
            "text/plain": [
              "     par_id      art_id    keyword country  \\\n",
              "794       1  @@24942188   hopeless      ph   \n",
              "795       2  @@21968160    migrant      gh   \n",
              "796       3  @@16584954  immigrant      ie   \n",
              "797       4   @@7811231   disabled      nz   \n",
              "798       5   @@1494111    refugee      ca   \n",
              "...     ...         ...        ...     ...   \n",
              "2089   1459   @@1166455  immigrant      ca   \n",
              "2090   1460  @@20605972   disabled      ph   \n",
              "2091   1461  @@14812450    migrant      hk   \n",
              "2092   1462   @@1193000    migrant      hk   \n",
              "2093   1463  @@13673995   disabled      pk   \n",
              "\n",
              "                                                   text  label orig_label  \n",
              "794   We 're living in times of absolute insanity , ...      0          0  \n",
              "795   In Libya today , there are countless number of...      0          0  \n",
              "796   \"White House press secretary Sean Spicer said ...      0          0  \n",
              "797   Council customers only signs would be displaye...      0          0  \n",
              "798   \"\"\" Just like we received migrants fleeing El ...      0          0  \n",
              "...                                                 ...    ...        ...  \n",
              "2089  Walking down the street in Montreal , I am str...      0          0  \n",
              "2090  The Indians ' two-time All-Star second baseman...      0          0  \n",
              "2091  Australia currently takes immigrants with a Si...      0          0  \n",
              "2092  In another sign that labor markets remain rela...      0          0  \n",
              "2093  During his stay in Italy , he remained working...      0          0  \n",
              "\n",
              "[1300 rows x 7 columns]"
            ]
          },
          "execution_count": 30,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "negdf = data[data.label==0]\n",
        "negdf"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JP54HWc9HNKp",
        "outputId": "5edf99d1-c1c3-4b05-f40a-40bb9feac9cc"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "poor-families: 101\n",
            "homeless: 122\n",
            "vulnerable: 149\n",
            "migrant: 146\n",
            "hopeless: 110\n",
            "women: 133\n",
            "disabled: 120\n",
            "immigrant: 149\n",
            "refugee: 137\n",
            "in-need: 133\n",
            "my: 81\n",
            "tz: 41\n",
            "ie: 75\n",
            "in: 71\n",
            "au: 61\n",
            "ph: 57\n",
            "nz: 74\n",
            "lk: 69\n",
            "us: 76\n",
            "sg: 74\n",
            "bd: 73\n",
            "gh: 54\n",
            "pk: 73\n",
            "jm: 40\n",
            "ke: 60\n",
            "gb: 63\n",
            "ca: 65\n",
            "za: 78\n",
            "ng: 60\n",
            "hk: 55\n"
          ]
        }
      ],
      "source": [
        "for k in keywords:\n",
        "  print(f\"{k}: {len(negdf[negdf.keyword==k])}\")\n",
        "\n",
        "for k in countries:\n",
        "  print(f\"{k}: {len(negdf[negdf.country==k])}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 803
        },
        "id": "DQiNAuIUnZhP",
        "outputId": "3b4a010a-7d35-4442-84a9-689ccdd2629e"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(array([1.670e+02, 4.440e+02, 1.019e+03, 1.485e+03, 1.354e+03, 9.070e+02,\n",
              "        6.260e+02, 4.700e+02, 3.300e+02, 2.260e+02, 1.700e+02, 9.800e+01,\n",
              "        1.070e+02, 5.400e+01, 3.400e+01, 2.800e+01, 1.900e+01, 1.700e+01,\n",
              "        1.200e+01, 5.000e+00, 2.000e+00, 0.000e+00, 0.000e+00, 1.000e+00,\n",
              "        1.000e+00, 1.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        1.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n",
              "        0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00]),\n",
              " array([  1.  ,  10.08,  19.16,  28.24,  37.32,  46.4 ,  55.48,  64.56,\n",
              "         73.64,  82.72,  91.8 , 100.88, 109.96, 119.04, 128.12, 137.2 ,\n",
              "        146.28, 155.36, 164.44, 173.52, 182.6 , 191.68, 200.76, 209.84,\n",
              "        218.92, 228.  , 237.08, 246.16, 255.24, 264.32, 273.4 , 282.48,\n",
              "        291.56, 300.64, 309.72, 318.8 , 327.88, 336.96, 346.04, 355.12,\n",
              "        364.2 , 373.28, 382.36, 391.44, 400.52, 409.6 , 418.68, 427.76,\n",
              "        436.84, 445.92, 455.  , 464.08, 473.16, 482.24, 491.32, 500.4 ,\n",
              "        509.48, 518.56, 527.64, 536.72, 545.8 , 554.88, 563.96, 573.04,\n",
              "        582.12, 591.2 , 600.28, 609.36, 618.44, 627.52, 636.6 , 645.68,\n",
              "        654.76, 663.84, 672.92, 682.  , 691.08, 700.16, 709.24, 718.32,\n",
              "        727.4 , 736.48, 745.56, 754.64, 763.72, 772.8 , 781.88, 790.96,\n",
              "        800.04, 809.12, 818.2 , 827.28, 836.36, 845.44, 854.52, 863.6 ,\n",
              "        872.68, 881.76, 890.84, 899.92, 909.  ]),\n",
              " <a list of 100 Patch objects>)"
            ]
          },
          "execution_count": 16,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD4CAYAAAAAczaOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAR+UlEQVR4nO3df6zdd13H8efLFYZAXPfjOkdbvEUayCQiy80owRhCdXSD0P0BZItxFZs0xikgJNDpH4sakhGNc0RdrFtlM2SAA10zprOWEWLi5u4Ax34wdxljvc1Gr6zMH8Qf1bd/nE/XY2nX3nvuPbe9n+cjObnfz49zvp/vt9++7vd+zvd8T6oKSVIffmC5ByBJGh9DX5I6YuhLUkcMfUnqiKEvSR1ZtdwDeCHnnXdeTU5OLvcwJOm08sADD/xzVU0cq+2UDv3JyUmmp6eXexiSdFpJ8q3jtTm9I0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHTmlP5E7DpM7Pv/88pPXvX0ZRyJJS88zfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOnLC0E+yK8mBJA8do+1DSSrJea2cJB9PMpPkwSQXDfXdmuTx9ti6uJshSToZJ3Om/wlg89GVSdYBlwBPDVVfCmxoj+3Aja3vOcC1wBuBi4Frk5w9ysAlSfN3wtCvqi8Bzx6j6Xrgw0AN1W0Bbq2Be4HVSS4A3gbsqapnq+ogsIdj/CKRJC2tBc3pJ9kC7K+qfzyqaQ2wb6g82+qOVy9JGqN533snyUuBX2cwtbPokmxnMDXEK1/5yqVYhSR1ayFn+j8GrAf+McmTwFrgy0l+BNgPrBvqu7bVHa/++1TVzqqaqqqpiYmJBQxPknQ88w79qvpaVf1wVU1W1SSDqZqLquoZYDdwVbuKZyPwXFU9DdwNXJLk7PYG7iWtTpI0RidzyeZtwN8Dr0kym2TbC3S/C3gCmAH+BPhlgKp6Fvht4P72+K1WJ0kaoxPO6VfVlSdonxxaLuDq4/TbBeya5/gkSYvIT+RKUke6/+asYX6LlqSVzjN9SeqIoS9JHTH0Jakjhr4kdcTQl6SOGPqS1BFDX5I6YuhLUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6sjJfDH6riQHkjw0VPc7Sb6e5MEkf5Fk9VDbNUlmkjyW5G1D9Ztb3UySHYu/KZKkEzmZM/1PAJuPqtsDvK6qfgL4J+AagCQXAlcAP96e80dJzkhyBvCHwKXAhcCVra8kaYxOGPpV9SXg2aPq/qaqDrXivcDatrwF+FRV/WdVfROYAS5uj5mqeqKq/gv4VOsrSRqjxZjT/0Xgr9ryGmDfUNtsqzte/fdJsj3JdJLpubm5RRieJOmwkUI/yW8Ah4BPLs5woKp2VtVUVU1NTEws1stKkoBVC31ikl8A3gFsqqpq1fuBdUPd1rY6XqBekjQmCzrTT7IZ+DDwzqr63lDTbuCKJGcmWQ9sAP4BuB/YkGR9khczeLN392hDlyTN1wnP9JPcBrwFOC/JLHAtg6t1zgT2JAG4t6p+qaoeTvIZ4BEG0z5XV9X/tNf5FeBu4AxgV1U9vATbI0l6AScM/aq68hjVN79A/48CHz1G/V3AXfManSRpUfmJXEnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSRwx9SeqIoS9JHTH0JakjJwz9JLuSHEjy0FDdOUn2JHm8/Ty71SfJx5PMJHkwyUVDz9na+j+eZOvSbI4k6YWc8IvRgU8AfwDcOlS3A9hbVdcl2dHKHwEuBTa0xxuBG4E3JjkHuBaYAgp4IMnuqjq4WBsyH5M7Pr8cq5WkZXfCM/2q+hLw7FHVW4Bb2vItwOVD9bfWwL3A6iQXAG8D9lTVsy3o9wCbF2MDJEknb6Fz+udX1dNt+Rng/La8Btg31G+21R2v/vsk2Z5kOsn03NzcAocnSTqWkd/IrapiMGWzKKpqZ1VNVdXUxMTEYr2sJImFh/6327QN7eeBVr8fWDfUb22rO169JGmMFhr6u4HDV+BsBe4Yqr+qXcWzEXiuTQPdDVyS5Ox2pc8lrU6SNEYnvHonyW3AW4DzkswyuArnOuAzSbYB3wLe07rfBVwGzADfA94LUFXPJvlt4P7W77eq6ug3hyVJS+yEoV9VVx6nadMx+hZw9XFeZxewa16jkyQtKj+RK0kdMfQlqSOGviR1xNCXpI4Y+pLUEUNfkjpi6EtSR07m1spdGr798pPXvX0ZRyJJi8czfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdMfQlqSMjhX6SX0vycJKHktyW5CVJ1ie5L8lMkk8neXHre2Yrz7T2ycXYAEnSyVtw6CdZA7wPmKqq1wFnAFcAHwOur6pXAweBbe0p24CDrf761k+SNEajTu+sAn4wySrgpcDTwFuB21v7LcDlbXlLK9PaNyXJiOuXJM3DgkO/qvYDvws8xSDsnwMeAL5bVYdat1lgTVteA+xrzz3U+p979Osm2Z5kOsn03NzcQocnSTqGUaZ3zmZw9r4eeAXwMmDzqAOqqp1VNVVVUxMTE6O+nCRpyCjTOz8DfLOq5qrqv4HPAW8GVrfpHoC1wP62vB9YB9DazwK+M8L6JUnzNEroPwVsTPLSNje/CXgEuAd4V+uzFbijLe9uZVr7F6qqRli/JGmeRpnTv4/BG7JfBr7WXmsn8BHgg0lmGMzZ39yecjNwbqv/ILBjhHFLkhZgpO/IraprgWuPqn4CuPgYff8DePco65MkjcZP5EpSRwx9SeqIoS9JHTH0Jakjhr4kdcTQl6SOGPqS1BFDX5I6YuhLUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kdGek7cpOsBm4CXgcU8IvAY8CngUngSeA9VXUwSYAbgMuA7wG/UFVfHmX94zK54/PPLz953duXcSSSNJpRz/RvAP66ql4LvB54FNgB7K2qDcDeVga4FNjQHtuBG0dctyRpnhYc+knOAn4auBmgqv6rqr4LbAFuad1uAS5vy1uAW2vgXmB1kgsWPHJJ0ryNcqa/HpgD/jTJV5LclORlwPlV9XTr8wxwflteA+wbev5sq/t/kmxPMp1kem5uboThSZKONkrorwIuAm6sqjcA/86RqRwAqqoYzPWftKraWVVTVTU1MTExwvAkSUcbJfRngdmquq+Vb2fwS+Dbh6dt2s8DrX0/sG7o+WtbnSRpTBYc+lX1DLAvyWta1SbgEWA3sLXVbQXuaMu7gasysBF4bmgaSJI0BiNdsgn8KvDJJC8GngDey+AXyWeSbAO+Bbyn9b2LweWaMwwu2XzviOuWJM3TSKFfVV8Fpo7RtOkYfQu4epT1SZJG4ydyJakjhr4kdcTQl6SOGPqS1BFDX5I6YuhLUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktSRUe+y2R2/JF3S6cwzfUnqiKEvSR0x9CWpI93M6Q/PxUtSrzzTl6SOGPqS1JGRQz/JGUm+kuTOVl6f5L4kM0k+3b40nSRntvJMa58cdd2SpPlZjDP99wOPDpU/BlxfVa8GDgLbWv024GCrv771kySN0Uihn2Qt8HbgplYO8Fbg9tblFuDytryllWntm1p/SdKYjHqm//vAh4H/beVzge9W1aFWngXWtOU1wD6A1v5c6///JNmeZDrJ9Nzc3IjDkyQNW3DoJ3kHcKCqHljE8VBVO6tqqqqmJiYmFvOlJal7o1yn/2bgnUkuA14C/BBwA7A6yap2Nr8W2N/67wfWAbNJVgFnAd8ZYf2SpHla8Jl+VV1TVWurahK4AvhCVf0ccA/wrtZtK3BHW97dyrT2L1RVLXT9kqT5W4rr9D8CfDDJDIM5+5tb/c3Aua3+g8COJVi3JOkFLMptGKrqi8AX2/ITwMXH6PMfwLsXY32SpIXxE7mS1BFDX5I6YuhLUkcMfUnqSDf3018Kfl+upNONZ/qS1BFDX5I6YuhLUkcMfUnqiKEvSR0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JHDH1J6oihL0kd8S6bi8Q7bko6HSz4TD/JuiT3JHkkycNJ3t/qz0myJ8nj7efZrT5JPp5kJsmDSS5arI2QJJ2cUaZ3DgEfqqoLgY3A1UkuBHYAe6tqA7C3lQEuBTa0x3bgxhHWLUlagAWHflU9XVVfbsv/CjwKrAG2ALe0brcAl7flLcCtNXAvsDrJBQseuSRp3hbljdwkk8AbgPuA86vq6db0DHB+W14D7Bt62myrO/q1tieZTjI9Nze3GMOTJDUjh36SlwOfBT5QVf8y3FZVBdR8Xq+qdlbVVFVNTUxMjDo8SdKQkUI/yYsYBP4nq+pzrfrbh6dt2s8DrX4/sG7o6WtbnSRpTEa5eifAzcCjVfV7Q027ga1teStwx1D9Ve0qno3Ac0PTQJKkMRjlOv03Az8PfC3JV1vdrwPXAZ9Jsg34FvCe1nYXcBkwA3wPeO8I6z6lec2+pFPVgkO/qv4OyHGaNx2jfwFXL3R9CzEcvpIkb8MgSV0x9CWpI4a+JHXE0Jekjhj6ktQRQ1+SOmLoS1JH/BKVMfJDW5KWm6G/xPyAmKRTidM7ktQRQ1+SOmLoS1JHDH1J6oihL0kd8eqdZeLlm5KWg2f6ktQRQ1+SOuL0zinAqR5J42Lon2L8BSBpKY099JNsBm4AzgBuqqrrxj2G08XxbuHgLwNJCzXW0E9yBvCHwM8Cs8D9SXZX1SPjHMfpzr8GJC3UuM/0LwZmquoJgCSfArYAhv4CHf3XgL8EJL2QcYf+GmDfUHkWeONwhyTbge2t+G9JHlvgus4D/nmBzz1t5WPHrO5yXxyH++II98URK21f/OjxGk65N3Kraiewc9TXSTJdVVOLMKTTnvviCPfFEe6LI3raF+O+Tn8/sG6ovLbVSZLGYNyhfz+wIcn6JC8GrgB2j3kMktStsU7vVNWhJL8C3M3gks1dVfXwEq1u5CmiFcR9cYT74gj3xRHd7ItU1XKPQZI0Jt57R5I6YuhLUkdWZOgn2ZzksSQzSXYs93iWWpJ1Se5J8kiSh5O8v9Wfk2RPksfbz7NbfZJ8vO2fB5NctLxbsLiSnJHkK0nubOX1Se5r2/vpdhEBSc5s5ZnWPrmc414KSVYnuT3J15M8muRNHR8Xv9b+fzyU5LYkL+nx2FhxoT90q4dLgQuBK5NcuLyjWnKHgA9V1YXARuDqts07gL1VtQHY28ow2Dcb2mM7cOP4h7yk3g88OlT+GHB9Vb0aOAhsa/XbgIOt/vrWb6W5Afjrqnot8HoG+6W74yLJGuB9wFRVvY7BhSRX0OOxUVUr6gG8Cbh7qHwNcM1yj2vM++AOBvc3egy4oNVdADzWlv8YuHKo//P9TvcHg89+7AXeCtwJhMEnLVcdfXwwuIrsTW15VeuX5d6GRdwXZwHfPHqbOj0uDt8N4Jz2b30n8LYej40Vd6bPsW/1sGaZxjJ27c/QNwD3AedX1dOt6Rng/La8kvfR7wMfBv63lc8FvltVh1p5eFuf3w+t/bnWf6VYD8wBf9qmu25K8jI6PC6qaj/wu8BTwNMM/q0foMNjYyWGfreSvBz4LPCBqvqX4bYanLKs6Otzk7wDOFBVDyz3WE4Rq4CLgBur6g3Av3NkKgfo47gAaO9bbGHwi/AVwMuAzcs6qGWyEkO/y1s9JHkRg8D/ZFV9rlV/O8kFrf0C4ECrX6n76M3AO5M8CXyKwRTPDcDqJIc/iDi8rc/vh9Z+FvCdcQ54ic0Cs1V1XyvfzuCXQG/HBcDPAN+sqrmq+m/gcwyOl+6OjZUY+t3d6iFJgJuBR6vq94aadgNb2/JWBnP9h+uvaldrbASeG/pz/7RVVddU1dqqmmTw7/6Fqvo54B7gXa3b0fvh8P55V+u/Ys56q+oZYF+S17SqTQxuY97VcdE8BWxM8tL2/+Xwvujv2FjuNxWW4gFcBvwT8A3gN5Z7PGPY3p9i8Cf6g8BX2+MyBnOQe4HHgb8Fzmn9w+AKp28AX2NwRcOyb8ci75O3AHe25VcB/wDMAH8OnNnqX9LKM639Vcs97iXYDz8JTLdj4y+Bs3s9LoDfBL4OPAT8GXBmj8eGt2GQpI6sxOkdSdJxGPqS1BFDX5I6YuhLUkcMfUnqiKEvSR0x9CWpI/8HnICnTJX3X3wAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "texts = negdf['text'].astype(str).values.tolist()\n",
        "texts_tokened = [snt.split() for snt in texts]\n",
        "texts_len = [len(snt) for snt in texts_tokened]\n",
        "plt.hist(texts_len, bins=100)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "BnwMD4vonZhP",
        "outputId": "48bfec33-e1be-421b-ffdf-bf411a8c4388"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "28406 365159\n",
            "in-need\n",
            "6667 34317\n",
            "refugee\n",
            "6052 34470\n",
            "poor-families\n",
            "5655 30609\n",
            "homeless\n",
            "6012 31362\n",
            "disabled\n",
            "6817 35555\n",
            "vulnerable\n",
            "7290 40694\n",
            "migrant\n",
            "7167 39928\n",
            "women\n",
            "7588 37886\n",
            "immigrant\n",
            "7190 39900\n",
            "hopeless\n",
            "7765 40438\n",
            "in-need: ['ufuoma' 'killarney' 'prodigious' 'neo-colonial' 'traumatise' 'malini'\n",
            " 'psa' 'deol' 'foodbank' 'popping' 'jaffery' 'caps' 'rehmat' 'mahila'\n",
            " 'realsport' 'peterson' 'loo' 'nuwan' 'midfielder' 'ape' 'strikers' '6-8'\n",
            " \"o'loughlin\" 'rakai' 'world-record' '\"pop' 'bondage' 'refurbishing'\n",
            " 'comparatively' 'hema' '\"sawang' 'replenished' 'inject' 'x5'\n",
            " 'gunathilaka' 'roland' 'e-commerce' 'tritsch' 'gaffer' \"o'brien\"\n",
            " 'karamoja' 'emerges' 'post-brexit' 'mcissac' 'evacuate' 'bukoba' 'pieta'\n",
            " 'needling' 'perceptible' 'suv' 'gouveia' 'old-school' 'isingiro'\n",
            " 'saddest' 'shs140billion' '#puertorico' 'unsatisfactory' 'contingency'\n",
            " 'playmaking' 'trolleys' 'silky' 'western-backed' 'yahapalanaya' 'kiev'\n",
            " 'isco' 'vruddha' 'boxer' 'insulin' 'sorely' 'smoother' 'kamugisha'\n",
            " 'queens' 'deepen' 'blistering' 'nfl' 'collagen' 'angle' 'upheaval'\n",
            " 'dhanuskha' 'putin' 'skytrax' 'fla.' 'sunny' 'reboot' 'aeroplane' 'fuzzy'\n",
            " 'bobby' 'firmer' '\"walter' 'darlings' 'bowler' 's&amp;p' 'hampers'\n",
            " 'avram' 'firmin' 'dunlop' 'trumpet' 'pinned' 'deltans' 'rebel']\n",
            "refugee: ['anti-refugee' 'hotlines' 'conscientious' 'contrasted' 'comment(s)'\n",
            " 'arm-twisting' 'deterrence' 'sivs' 'respecting' 'sacramento' 'neo-nazis'\n",
            " 'ipsos' 'eileen' '-ap' 'daly' 'confides' 'nun' 'benedictine' 'sh40,000'\n",
            " 'unhcr-facilitated' 'hometowns' 'thirty-one' 'expects' 'astonishment'\n",
            " 'prioritizing' 'ifo' '-bombing.' 'banksy' 'prolific' 'chimed' 'shohayet'\n",
            " 'demolishes' '16-month-old' 'maims' 'diarrhoea' '655,000' 'midway'\n",
            " '\"wilkinson' 'kobani' 'dadaab' 'cheering' 'hwr' 'myitkyina'\n",
            " 'kenyareuters' '868,000.' '05:29' 'refugees.' 'christi' 'pax' 'gmt+0530'\n",
            " 'flummoxed' 'cooped' 'medicins' 'musali' 'frontieres' 'slight' '2,600'\n",
            " 'stabilisation' 'nyarugusu' '312' '725' 'nduta' 'mtendili' 'removes'\n",
            " 'mutineers' 'm23' 'kivu' 'biometric' 'exiles' 'sikkim' 'retno'\n",
            " 'admissibility' 'marsudi' 'trawalua' 'goose' 'd.' 'begged' 'kampala'\n",
            " 'uachtar' 'capsized' 'zealot' 'dubbing' '263' 'suspends' 'ras' 'higgins'\n",
            " 'machibya' 'selma' 'farook' 'scratch' 'eys' 'violin' 'reconliation'\n",
            " 'familyiberately' 'bunks' 'blared' 'indo-chinese' 'sudanese-born'\n",
            " 'lomong' 'maweni']\n",
            "poor-families: ['urchins' 'osme' 'dswd' 'p10,000' 'nagpur' '1,550' '571' 'federal-state'\n",
            " 'convergence' 'bats' 'curable' 'cured' 'school-to-work' 'rancangan'\n",
            " 'cafeteria' 'copayment' 'cents' 'reduced-price' 'accruing'\n",
            " 'heartbreakingly' '$68,000' 'snowflake' 'kaur' 'harsimrat' 'daily/asia'\n",
            " '81st' 'kagubatan' 'bantay' 'maclehose' 'benguet' 'lures' 'metros'\n",
            " '11-14' '\"shifting' 'stipends' 'dioquino' 'mudzondo' 'kebbi' 'gairo'\n",
            " 'mutating' 'administrated' 'sh1,000' 'sh600' 'potent' 'immunisation'\n",
            " '190' 'tomas' 'rmt' 'tambahan' 'makanan' 'pronounce' '$40,000' '$25,164'\n",
            " 'hardworking' 'dole' 'keating' 'quarter-century' 'p60-billion' 'listing'\n",
            " 'tasmanian' 'kakadu' 'pmnhp' 'empanelled' 'poinsett' 'tripping'\n",
            " 'cavalier' 'proprieties' 'sh17' 'titanium' 'stack' 'kilole' 'biomedical'\n",
            " 'nominees' 'architectural' 'sullied' 'leap' 'khichdi' 'supermarket'\n",
            " 'benin' 'gwen' 'carter' 'alberici' 'experiment' 'marital' 'zyngier'\n",
            " 'lecturer' 'monash' 'severest' 'mashood' 'high-achieving' 'weaned' '3.4'\n",
            " '4.3' 'principals' 'legitimise' 'mississippi' 'a.a.' '$65,000'\n",
            " 'craighead' 'zahur']\n",
            "homeless: ['savita' 'londoner' '43,850' 'kolaroa' 'muizenberg' 'self-worth.'\n",
            " 'ershad' 'nirbahi' 'tawnya' 'monpura' 'khas' 'allegation' 'medications'\n",
            " 'homelessness.' 'vanita' 'tchoukball' 'pahari' 'kunene' 'philippi.'\n",
            " 'mapusa' 'dunoon' 'thatched' 'dwelling' 'goldrick-rab' 'librarians'\n",
            " 'belly' 'olavakkodu' '24-31' 'surrounds' 'grp' 'panvel' 'rajamani'\n",
            " 'cardboard' 'outdoors' 'avowed' 'solace' 'confessing' 'mercilessly'\n",
            " 'functioned' 'eighteen' 'naira' 'catalyst' 'adversity' 'dustbins' '3000'\n",
            " 'news18' 'advert' 'mwanda' 'loc' 'ib' 'budubram' 'diasporan' 'hurley'\n",
            " 'understandably' 'pre-occupation' 'denis' 'perrier' 'raymond' 'hassles'\n",
            " 'messing' 'campbell' '\"reginald' 'gilchrist' 'bugheri' 'ashiaman'\n",
            " 'akweteman' 'deprivation' 'carl' 'sh1' 'sh9' '9,070' 'monroe' 'drop-in'\n",
            " 'sams' 'narowal' 'flyovers' 'clusters' 'royapuram' 'teynampet'\n",
            " 'rent-free' 'nagar' 'thiru-vi-ka' 'madhavaram' 'manali' '483'\n",
            " 'tiruvottiyur' 'monsoon.' 'geraldine' 'roadsides' '1,014' 'pavements'\n",
            " 'nearing' 'underemployment' 'malate' 'sulayman' 'transitional'\n",
            " 'support/counselling' 're-establish' 'sheehan' '\"seal']\n",
            "disabled: ['shahid' 'a.j.' '6.30pm' '8000' 'villiers' 'dispenser' 'bour'\n",
            " 'peripheral' 'oriental' 'exoskeleton' 'puffing' '$50' 'magnifying'\n",
            " 'curbside' 'mull' 'suzuki' 'cepe' 'eldoret' \"o'regan\" 'two-out'\n",
            " 'cisgender' 'ab' 'babu' 'half-way-tree' 'hanged' 'ichiro' 'ntlemeza'\n",
            " 'formats' 'ill/disabled' 'chamathkaraye' 'pinch-hitter' 'ramps' 'wanjuki'\n",
            " 'double-a' 'ellis' 'enthusiastic' 'refined' 'waive' 'subtracts'\n",
            " 'montague' 'berkeley' 'taxpayers-' 'appointing' 'maj-gen' 'ratification'\n",
            " 'eilish' 'barnwood' 'mira' 'hiv/aids-affected' 'sub-inspector' 'kershaw'\n",
            " 'handrails' 'rehire/job' 'cervantes' 'simulated' 'insert'\n",
            " 'car-enthusiast' 'dumaguete' '*may' 'sh5.7' 'gb' 'accommodated' 'disk'\n",
            " 'barrier-free' 'categories-' 'intellectually' 'mustard' 'setback'\n",
            " 'sathkaraya' 'amputated' 'all*' 'herniated' 'arulraja' 'pwds' 'ihc' 'p30'\n",
            " 'wishlist' 'tired/believe' 'jutc' 'sacking' 'activate' 'p60' 'tsc'\n",
            " 'ninth' 'teluk' 't20is' 'one-year-ole' 'six-week' 'attendee' 'carmichael'\n",
            " 'incorporate' 'runners' 'bahang' 'corfee' 'didrm' 'harped' 'cropped'\n",
            " 'yankees' 'physiotherapy' 'purdue']\n",
            "vulnerable: ['rendle' 'neutralise' 'lieut' 'adikpo' 'handset' 'dispensing'\n",
            " 'heat-related' 'remedies' 'unfulfilled' 'unabashed' 'unionism'\n",
            " 'chemical/environmental' 'greenhouse' '\"islamabad' 'railways' 'ahmadiyya'\n",
            " 'achagh' 'empathic' 'liv' 'kerigbo' 'kilimanjaro' 'heretical'\n",
            " 'senanayake' 'lukaku' 'kraybill' 'nineteen' 'fellaini' 'slings'\n",
            " 'council-funded' 'differential' 'unlicensed' 'herbal' 'day-light'\n",
            " 'impulse' 'pam' 'wfp-contracted' 'didn' 'ferocity' 'wallabies'\n",
            " 'centrelink' 'mbaduku' 'muamba' 'nurtured' 'deans' 'preyed'\n",
            " 'precipitation' '\"chief' 'brunton' 'forthcoming' 'self-represent'\n",
            " 'set-pieces' 'lee-chin' 'ancestries' 'bankers' 'fluctuations' 'tyrone'\n",
            " 'bridges/locations' 'shantha' 'knives' 'footprint' 'abg' 'akerigbo'\n",
            " 'fifty-three' 'nicola' 'os' 'zonal' 'ontario' 'filippo' 'yield'\n",
            " 'tangible' 'aerial' 'unsecured' 'understandable' 'genetics' 'vandeikya'\n",
            " '4g' 'paperwork' 'liability' 'hamann' 'under-nutrition' 'clustered'\n",
            " 'comrade' 'bedford' 'gunshots' 'grievance' 'consumer' 'grandi' 'ugondo'\n",
            " 'languishing' 'benevolence' 'lays' '67th' '\"turner-jones' 'cuckoo'\n",
            " 'un-vetted' 'raiding' 'mak' 'unrepresented' 'romelu' 'frazer']\n",
            "migrant: ['slovakia' 'western-style' '\"martinez' 'multi-ethnic' 'coup' 'yoder'\n",
            " 'macroeconomic' 'h4' 'bachelet' 'ryerson' 'seventies' 'aquarius'\n",
            " 'sunayana' 'bharatiya' \"o'connell\" 'months-old' 'non-hungarian' 'co.'\n",
            " 'hobnob' 'unjust' 'empirical' '300-seat' 'confronting' 'emigrant' 'dock'\n",
            " 'rings' '$12.5' 'equivocal' 'davutoglu' 'emmet' 'janata' 'court-martial'\n",
            " 'fiery' '10-20-50,000' 'rift' 'prescribe' 'speeches' 'darko' 'janos'\n",
            " 'government-initiated' 'joblessness' '90-120,000' 'ifi' 'environics'\n",
            " 'krishak' 'chimp-like' 'debunked' 'omidvar' 'persisted' 'arpaio'\n",
            " 'sangram' 'goldman' 'regularize' 'changanassery' 'fico' 'fargo'\n",
            " 'on-board' 'e-card' 'gettysburg' 'bust' 'emerald' 'dumala' 'guyana'\n",
            " 'scuttle' 'maricopa' 'eritreans' 'malpractices' 'familiesat' 'cukier'\n",
            " 'ci' 'keralite' 'mukti' 'singaporean' 'samiti' 'vojinovic/ap' 'navalny'\n",
            " 'kurichy' 'agence' 'wadsworth' 'omb' 'detestable' 'disenfranchise' 'ader'\n",
            " 'depart' 'darling' 'millamena' 'sachs' 'cut-off' 'irudaya' 'ratna'\n",
            " 'belgrade' '629' 'stinky' 'seafarers' 'rajan' 'halting' 'serpent'\n",
            " 'unlovable' '\"bank' 'flip']\n",
            "women: ['blanket' 'fast-track' 'staff-air' 'prabha' 'introduces' 'yy' 'yearafter'\n",
            " 'seventeen' 'hormone' 'iris' '85%' 'ghrelin' 'emmanuelle' 'vaila'\n",
            " 'powder' 'farooqui' 'kinross' 'dosage' 'bandies' 'evangelista' 'setup'\n",
            " 'infamy' 'buffet' 'barsley' 'mcalister' 'amour' 'peptide' 'riva'\n",
            " 'obstruction' 'rangiaowhia' 'epsilon' 'ndimande' 'shave' 'hk$380,000'\n",
            " 'anal' 'goonetileke' 'frat' 'marshal' 'ingenious' 'streep' '944'\n",
            " 'slaughtered' 'now-disgraced' 'fodder' 'bongi' 'homosexual' 'invites'\n",
            " 'abetting' 'eskilstuna' '3.7' 'clout' 'magpies' '97%' 'tua' 'dench'\n",
            " 'treadmill' 'post-trauma' 'calorie' '\"several' 'forensics' 'searched'\n",
            " 'calories' '\"johnson' 'toll-free' 'masturbate' 'kozinski' 'sasol'\n",
            " 'subjecting' 'hk$650,000' 'hunger-suppressing' 'childless' 'actresses'\n",
            " 'kian' 'segregate' 'women-run' 'roshan' 'payoffs' 'ghostbusters'\n",
            " 'violence-against-women' 'gpm' 'defends' 'fir' 'handicraft' 'sparse'\n",
            " 'chief-of-defence' 'kappa' 'embroider' 'sexual-assault' 'footnoted'\n",
            " 'breast' 'alison' 'geologist' 'unequal' 'origins' 'award-winning'\n",
            " 'eight-story' 'instructs' 'reo' 'raroa' 'judi']\n",
            "immigrant: ['spices' 'ros' 'inhabit' 'patchett' 'cherry-picked' 'filo'\n",
            " 'well-balanced' 'ranch' 'eugenicists' 'phoebe' 'mbue' 'riel' 'bedclothes'\n",
            " 'indentured' 'jerry' 'yang' 'antithetical' 'buccaneers' 'heralded'\n",
            " 'legalization' 'faraway' 'conquerors' 'hadley' 'koogle' 'privatized'\n",
            " 'cameroon-born' 'mythology' 'execu' 'programmer' 'halts' 'sisi' 'behold'\n",
            " 'ybarra' 'laundries' 'marginalising' 'curved' 'anglo-saxon' 'pga'\n",
            " 'inhabitant' 'formalize' 'orientated' 'full-board' 'dictated' 'loyalties'\n",
            " 'distressing' 'lehman' 'directory' 'manadated' 'materialize'\n",
            " 'northampton' 'motorola' 'shit' 'ching' 'insults' 'math-oriented'\n",
            " 'sequoia' 'stalemate' 'much-touted' 'imbolo' 'republican-led' 'celtic'\n",
            " 'mogul' 'suckers' 'winfrey' 'convent' 'optional' '\"oprah' 'unnavigable'\n",
            " 'galvanizing' 'grisel' 'pluralistic' 'undesirable' '19.10'\n",
            " 'dissimilarity' 'masuma' 'explorers' 'midterm' 'canceled' 'bouhlel'\n",
            " 'diversified' 'fiancee' 'eclectic' 'pen/faulkner' 'handy' 'apprehensions'\n",
            " 'socrates' '10-20' 'accumulation' '9.60' 'melded' 'marching'\n",
            " 'freewheeling' '\"stefanovic' 'devised' 'schmidt' 'magdalene' 'daugherty'\n",
            " 'afloat' 'taiwanese' 'shona']\n",
            "hopeless: ['dread' 'yasir' 'materialise' 'disciples' 'enveloping' 'permitting'\n",
            " \"gov't\" 'bbs' 'bangs' 'clinically' 'outlooks' 'umno/barisan' 'bowled'\n",
            " 'wager' 'abstain' 'grind' 'maithripala' 'leilani' 'unsurpassable' 'maxi'\n",
            " 'fielding' 'snarls' 'narrowness' 'ecological' 'juggernaut' 'sobbed'\n",
            " 'hippies' 'blockbusters' 'likeliest' 'contemplated' 'on-edge' 'pairs'\n",
            " 'anyways' '\"english-born' 'steyn' 'jared' 'hopelessness' 'dreamt'\n",
            " 'hopeless' 'breakout' 'joy' 'behan' 'clutch' 'worthlessness' 'tipsy'\n",
            " 'normality' 'telephonic' 'blip' 'helplessness/feeling' 'ralegaon'\n",
            " 'partakes' 'feelings/experiences' 'morkel' 'sprout' 'manageable' 'wasim'\n",
            " 'guessed' 'lifehacker' 'sommers' 'reproduce' 'g.i.' 'lava' 'cobra'\n",
            " 'ashwin' 'havildar' 'wicketless' 'low-budget' 'eternally' 'intelligent'\n",
            " 'gritty' 'mound' 'inured' 'siddhi' 'complexion' 'coss' 'home-ownership'\n",
            " 'binesh' 'tradie' 'wickets' 'pessimism' 'crux' 'surreal' 'chasers'\n",
            " 'mcmanus' '\"lamenting' 'waking' 'slacking' 'rahane' 'borstal' 'waquar'\n",
            " 'jadeja' 'chokes' 'samarpan' 'elvis' 'patriotism' 'autobiographical'\n",
            " 'hazare' 'by-elections' 'grasped' 'headfirst']\n"
          ]
        }
      ],
      "source": [
        "result = calculate_keyword_pmi(negdf)\n",
        "for keyword in keywords:\n",
        "  pmis, words = result[keyword]\n",
        "  values, indices = torch.topk(torch.Tensor(pmis), 100)\n",
        "  print(f\"{keyword}: {np.array(words)[indices]}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "L489pxZqfL70",
        "outputId": "ff882ec4-f442-4220-d33d-256dd404a652"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "28406 365159\n",
            "sg\n",
            "4583 18369\n",
            "my\n",
            "3992 15337\n",
            "hk\n",
            "4472 17773\n",
            "lk\n",
            "5169 23344\n",
            "ie\n",
            "4416 17875\n",
            "ca\n",
            "4575 18643\n",
            "jm\n",
            "3832 16055\n",
            "ng\n",
            "4498 19186\n",
            "pk\n",
            "4953 21833\n",
            "nz\n",
            "4116 16737\n",
            "gh\n",
            "4097 17029\n",
            "tz\n",
            "3042 11844\n",
            "au\n",
            "4534 18428\n",
            "za\n",
            "4449 18055\n",
            "us\n",
            "5378 23536\n",
            "in\n",
            "5381 22087\n",
            "ke\n",
            "4084 16536\n",
            "ph\n",
            "4606 18635\n",
            "bd\n",
            "3960 16469\n",
            "gb\n",
            "4375 17388\n",
            "sg: ['vinta' 'kampot' 'alindajao' 'crewman' '\"filipino' '\"nhs' 'consultants'\n",
            " 'pathogenic' 'orchestra' 'khushbu' 'cancellations' 'zero-tolerance'\n",
            " 'aluminum' 'bokor' 'shakedowns' 'cage' 'sandhya' 'reservation'\n",
            " 'plaintiffs' 'lachlan' 'murdoch' 'headquartered' 'embattled'\n",
            " 'moroccan-born' 'buraika' 'robot' 'upside' 'medina' 'ayatollah'\n",
            " 'khomeini' \"shari'ah\" 'suisse' 'second-class' 'ul-haq' 'removes'\n",
            " 'translators' 'spd' 'surging' 'aboutaleb' '911' 'neurological' 'schrock'\n",
            " 'dosimeter' 'casualties' 'thermometer' '$68,000' 'sub-decree'\n",
            " 'interviewer' '1,288' 'toh' 'sub-zero' 'reshuffle' 'faults' 'analyses'\n",
            " 'smrt' 'jeshi' 'soby' 'sofy' 'cuddle' 'applauds' 'iwl' 'aiff' 'praful'\n",
            " 'sds' 'emerson' 'greased' 'lax' '554,000' 'electras' 'embody' 'tyranny'\n",
            " 'brute' 'barbadian' 'faisal' '\"donald' 'kofron' '\"human' 'showboating'\n",
            " 'trembling' 'uniting' 'studio-perfect' 'indonesian-born' 'buff' 'earnest'\n",
            " 'strident' 'multi-month' 'bungalows' 'perform.the' 'shimbun' 'sankei'\n",
            " 'hazani' 'aashram' 'chanchalguda' 'cherlapally' 'kidnappers' 'fragmented'\n",
            " 'teaming' 'sosd' 'purina' 'kcr']\n",
            "my: ['airbus' 'complexitybut' '\"added' 'money-laundering' 'catechesis' 'rm240'\n",
            " 'jurisdiction' 'outline' 'imprisonable' 'aon' 'a380' 'hewitt' '45%' 'dnc'\n",
            " 'explode' 'pandan' 'laksamana' 'ppr' 'intermediate' 'cottage' 'iltc'\n",
            " 'utilised' 'storeroom' 'esscom' 'dcp' 'default' 'sheila' 'baroness' 'tho'\n",
            " 'swelled' 'jdt' '3.0' 'mega' 'op' '57th' '473' 'kechara' 'kozak' 'ic'\n",
            " 'sukuk' '\"deutsche' 'rafizi' 'annuar' 'unikl' 'pro-chancellor' 'rm50,000'\n",
            " 'dismiss' 'yusof' 'isakuala' 'universiti' 'federer' 'envisions' 'ovation'\n",
            " 'cabrini' 'frances' 'missionary' 'gelang' 'mysteriously' 'patah'\n",
            " 'khazzani' 'dap' 'unsettled' 'zughbi' '20.04' 'khor' 'korean-born'\n",
            " 'helper' 'cgc' 'foo' 'loh' 'rhb' 'zamree' 'us$114' 'doss' 'kerja'\n",
            " 'jazlan' 'barisan' 'shoving' 'ki-suck' 'han' '\"universities'\n",
            " 'mixed-heritage' 'pesron' 'slow-growing' 'overfishing' '1,188' 'seizure'\n",
            " '78,221' 'phishing' 'brickfields' 'sha' 'hatch' 'rtm' 'muhyiddin'\n",
            " 'maszlee' 'rm50' 'rm150' 'peso' '0.29' 'hollins']\n",
            "hk: ['65.3' 'courtrooms' 'latina' 'incentivizes' 'china-based' 'daegu'\n",
            " '\"comedian' 'mongol' 'c.k' 'assi' 'alberto' 'shinzo' 'sz' 'contains'\n",
            " 'kely' 'comedians' 'min' 'goodman' 'abby' 'us$100' 'pledging' 'schachner'\n",
            " 'julia' 'wolov' 'corry' 'yanqing' 'gaokao' 'th' 'dui' 'mumbling'\n",
            " 'mandopop' 'chuk' 'urbanites' 'rescinding' 'impromptu' 'squares'\n",
            " 'nightly' 'tinny' 'us$2.8' 'well-established' 'panties' 'rthk'\n",
            " 'near-naked' 'pao' 'ming' '640,000' 'translating' 'hukou' '171,000'\n",
            " '190,000' 'shau' '31.6' 'foodlink' 'collects' 'leftover' 'people.yet'\n",
            " 'retains' 'intolerant' 'forbid' 'resell' 'eni' 'monetarily' 'dpf'\n",
            " 'bingjiao' 'wan.an' 'combative' 'uy' 'refinery' 'carnay' 'anti-people'\n",
            " 'hengyuan' 'guangxi' '2,943' 'motorbikes' 'wannacry' '21-14' 'allege'\n",
            " 'emmy-winning' 'louie' 'ple' 'supervisors' 'tsang' 'millimeters' 'po'\n",
            " 'shui' 'sham' 'haifeng' 'tibetans' '21-15' 'choi' 'live-in' 'seo' 'eman'\n",
            " 'hyun' 'live-out' '21-12' 'erwiana' '21-16' 'liaison' 'bodypainting']\n",
            "lk: ['engender' 'tgte' 'amarasekera' 'weeraratna' '1977' '6.5%' 'walmart'\n",
            " '5.8%' '18-25' '3.1%' 'middle-income' '3,025' 'resumption' 'cmag' 'kaveh'\n",
            " 'bahrami' 'suffrage' 'mos' 'payee' 'payees' 'miscommunication'\n",
            " 'samaraweera' 'refunding' 'deteriorated' 'refunded' 'bombing' 'ananthan'\n",
            " 'konstantinidis' 'reuters/alkis' 'hinojosa-ojeda' 'ra' 'ceylon' 'decency'\n",
            " 'ucla' 'inaugurated' 'cumulative' 'three-decade' 'devoutly' 'pdki'\n",
            " 'asoka' '\"myanmar' 'capitulate' 'doha' 'disrupting' 'central-london'\n",
            " 'echoing' 'socio' 'traumas' 'renewable' 'alles' 'amma' 'sub-inspector'\n",
            " 'silva' 'matched' 'multimedia' 'candour' 'rodger' 'monks' 'sathkaraya'\n",
            " 'chamathkaraye' 'persuasion' 'sera' 'salesman' 'magnanimous' '05:29'\n",
            " 'kussi' 'agriculture-dependent' 'gmt+0530' 'kandy' 'comment(s)' 'acutely'\n",
            " 'brazen' 'grape' 'vine' 'reimpose' 'dismay' '-year' 'retire' 'lapses'\n",
            " 'matthews' 'arakan' 'state-backed' '6,600' 'eelam' '252,000' 'gmt' '1100'\n",
            " 'curtailed' 'wijetunga' 'folly' 'cling' '75,000' 'happenings' 'ltte-led'\n",
            " 'systematized' 'wigneswaran' 'gandhian' 'braybrooke' 'heartfelt' 'vanni']\n",
            "ie: ['ave.' 'miniature' 'counter-intuitive' 'motorised' '520' 'materialism'\n",
            " 'orgy' 'self-refer' 'out-of-hand' 'dystopia' 'doubled-down' 'shapes'\n",
            " 'randall' 'mopeds' 'dorchester' '934' 'banshee' 'discharged'\n",
            " 'father-of-four' 'sportpesa' '60sq' 'heights' 'unchr' 'oscar-winning'\n",
            " 'lodge' 'arrears' 'hastily' 'luas' 'grinding' 'bristol' 'three-quarters'\n",
            " 'regeneration' 'tog.ie' 'tog' 'caves' 'renaissance' 'lowell' 'no-fly'\n",
            " '1924' '76,000' 'fredericksburg' 'terrace' 'clearly-marked' 'umass'\n",
            " 'concern\"' 'mccabe' 'gallantry' 'hearty' 'boozy' 'rows' '6-0' 'dialysis'\n",
            " 'borstal' 'autobiographical' 'behan' 'drugging' 'inishtrahull' 'constand'\n",
            " 'deadlock' 'bailiffs' 'elena' 'vesnina' '6-2' 'lighthouse' \"o'connell\"\n",
            " 'emmet' 'dagger' 'emerald' 'credibility' 'savoury' 'loaned' 'wolaita'\n",
            " 'gettysburg' '\"broadcasters' 'wasp' 'allegra' 'italian/jewish' 'gallant'\n",
            " 'ozymandias' 'antiquity' 'cullum' 'understated' 'naturalism' 'kesha'\n",
            " \"o'regan\" 'eilish' 'abusers' 'storey' 'concordia' 'expanse' 'yalda'\n",
            " 'truces' 'laugh-out-loud' 'co-operate' 'culminates' 'comradery'\n",
            " 'affliction' 'patriotism' 'self-inflicted' 'preside']\n",
            "ca: ['hedges' 'criminologists' 'browser.' 'newbies' 'page.click' 'reload'\n",
            " 'benighted' 'assaf' 'scandalously' 'underclasses' 'transformations'\n",
            " 'springboard' 'self-identify' '2610' 'well-meaning' 'flowers' 'algernon'\n",
            " 'undergoes' 'f-type' 'ferraris' 'jonas' 'low-slung' 'roommate' 'osagie'\n",
            " 'odiase' 'stints' 'vocabulary' 'inclusionary' 'inquiries' 'multipronged'\n",
            " 'socio-economically' 'patenaude' 'swale' '\"none' 'infiltrators' 'aa'\n",
            " 'alcoholic' 'mutual-aid' 'lattes' 'drafted' 'wreckage' 'melaina'\n",
            " '1933-1948' 'boundlessly' 'biney' 'abella' 'troper' '@@7022812'\n",
            " 'headbutter' '58,000-square-foot' 'langots' 'roywood' 'fong' 'paige'\n",
            " 'child-protection' 'cazuka' 'daycare' 'after-school' 'froese'\n",
            " 'medications' 'langley' 'outdoors' 'kamloops' 'industrialized'\n",
            " 'undergarments' 'kushti' 'akhada' 'wrestling' 'sabzi' 'mandi'\n",
            " 'modernizing' 'hope.dar' 'catalyst' 'adversity' 'sinclair' 'episodically'\n",
            " 'overpriced' 'stampeders' 'tryouts' 'yorkville' 'bunk' 'supercar'\n",
            " 'support/counselling' 'transitional' 'binge' 'polo' '\"richter'\n",
            " 'short-track' 'tasered' 'rcmp' 'underemployment' 'pulse' 'semi-trailer'\n",
            " 'als' 'schoolyard' 'sellers' 'sex-trade' '$6,000' 'unworkable'\n",
            " 'undervalue']\n",
            "jm: ['generalised' 'fairs' 'sisi' 'utilise' 'sangster' 'fascist-oriented'\n",
            " 'burgeoning' 'famplan' 'socialisation' 'determiners' 'ustanny'\n",
            " 'personalised' '31-year-old' 'con-lib' 'honoured' 'disguised'\n",
            " 'configuration' 'claimant' 'marley' 'seismic' 'revocation' 'infuses'\n",
            " 'sibling' 'holdsworth' 'cheryl' 'anti-gay' 'unfold' '67-year-old'\n",
            " 'castries' 'compensatory' 'diluted' 'temper' 'rounding' 'charles-freeman'\n",
            " 'us$8,419' 'diffa' '\"byrs' '**25;73;toolong' 'debilitating' 'petitioner'\n",
            " 'himself/herself' 'cubans' 'parent(s)' 'entertain' 'town-based' '\"jerry'\n",
            " 'afro-caribbean' 'reveller' 'boobs' 'matalon' 'herb' 'jos' 'mart'\n",
            " 'less-than-favourable' 'roadside-assistance' 'biopic' 'ninety-five'\n",
            " 'inching' 'colette' 'organsations' 'jaa' '1.30' 're-opening'\n",
            " 'multimillion-dollar' 'paniculata' 'andrographis' 'bitters' 'murky'\n",
            " 'nseers' 'risden' 'lesotho' 'admiration' 'greeting' 'penalised'\n",
            " 're-entry' 'morality' 'flew' 'jet' 'stereotypically' 'predisposes'\n",
            " 'problem-solving' 'censure' 'facilitator' 'juveniles' 'paradof' '\"brown'\n",
            " 'evolution' 'jamaican' 'conductors' 'wake-up' 'muwwakkil' 'slice--'\n",
            " 'kimbo' 'proportions' 'ferguson--who' 'bahamian-born' 'on-the-ground'\n",
            " '11-year-old' 'niece' 'tazewell']\n",
            "ng: ['sociological' 'unjustly' '\"okoye' 'kanu' 'torsion' 'karman' 'testicular'\n",
            " 'ubulu' 'sox' 'abreu' 'agbaje' 'needsjimi' 'dwells' '17,000' 'photo/min'\n",
            " 'lagosians' 'batter' 'homeless.also' 'autoimmune' 'oboama' 'ezinihitte'\n",
            " 'derives' 'rabble-rouser' 'sampled' 'aegis' 'anti-social' 'panther'\n",
            " 'ikeduru' '$55' 'mid-1990s' 'ekeata' 'obafemi' 'awolowo' 'revolts'\n",
            " 'marvel' 'pecuniary' 'wardrobe' 'sensitising' 'akure' \"t'challa\" 'ududu'\n",
            " '@toekunbore' '\"un' 'mystic' 'n200m' 'blow-jobs' 'six-year' 'reliefs'\n",
            " 'lordship' 'domination' '09085141367' 'bender' 'carpenter' 'maison'\n",
            " '8:00am' '40/50' 'digitally' 'apapa' 'ebute' 'metta' 'hyper-aware'\n",
            " 'self-starters' 'observances' 'oyejide' '08131121730' 'n4' 'procured'\n",
            " 'ikoyi' 'yaba' 'acquaintance' 'ebute-metta' 'majorly' 'artisans' 'gough'\n",
            " 'ilaje' '\"quick' 'intercepted' '77-year' 'mercenaries' 'netted' 'seldi'\n",
            " 'serap' 'deceived' 'sharei' 'armon' '\"political' 'sqz' 'inserts' 'makoko'\n",
            " 'warn' 'jewelry' 'prolong' 'sawmill' 'logistical' 'oko-baba' 'adjacent'\n",
            " 'ikir' 'anchored' 'plumber' 'umuezeata']\n",
            "pk: ['tight-rope' 'bahrain' 'gf-770' 'fia' 'floodgates' 'ambo-lifters' '1820'\n",
            " 'delimitations' 'behaves' 'evenings' 'swan' 'geography' 'trunk'\n",
            " 'anti-human' 'escapism' 'dutch-courage' 'ayesha' 'equation' 'kurtas'\n",
            " 'emilia' 'non-provisions' 'lifts' 'guerrero' 'maritza' 'celebrities'\n",
            " 'penned' 'mashood' 'high-achieving' 'pims' 'wannabe' 'dufus' 'aaronson'\n",
            " 'retarded' '1947' 'mohajir' 'discrimination.recommend' 'achakzai'\n",
            " '\"shoaib' 'long-established' 'pmnhp' 'width' 'gradient' 'supermen'\n",
            " 'reggio' \"d'abramo\" 'dimora' 'coop' 'global-shia-sunni-war' 'unaffected'\n",
            " 'sunnis' 'beams' 'hounded' 'rebuffed' 'injustices' 'minhaj' 'gig' 'poop'\n",
            " 'ishrat' 'helping.we' 'ideas.recommend' 'overthrow' 'israelis' 'psdf'\n",
            " 'kretschmer' 'oath' 'koethen' 'anti-migrants' 'flare' 'supplements' '7/7'\n",
            " 'carpet' 'headbanging' 'all-female' 'coolers' 'windowless' 'deserters'\n",
            " 'proclamations' 'bilawal' 'cadets' 'plumbers' 'electricians' 'masons'\n",
            " 'carpenters' 'kp' 'sacrifices' 'pakhtuns' 'shilling' '1:6' 'rodi' 'naamo'\n",
            " 'kurd' 'bulgaria' 'recommend\"' 'nabiha' 'meher' 'curtailment' 'reprisals'\n",
            " 'ominous' '\"michael' 'thalassemia']\n",
            "nz: ['fractured' 'barras' 'nirmala' 'double-up' 'caucus' 'elmbridge' 'nyc'\n",
            " 'huria' 'rear-ends' 'ged' 'cann' 'ribs' 'blizzard' 'forthright' 'skulls'\n",
            " 'fijian' 'third-generation' 'gounder' 'command/control' 'swathes'\n",
            " 'whichever' 'narrator' 'swabhoomi' 'proliferation' 'densest'\n",
            " 'apprenticeships' 'holyrood' 'idiot' 'winz' '\"later' 'aroha' 'rourou'\n",
            " 'chloe' 'advertised' 'paula' 'swarbrick' 'golriz' 'ghahraman' 'dalmatian'\n",
            " '#500now' 'bennett' 'betrayal' 'ird' 'claudelands' 'waikato' 'waiving'\n",
            " 'psychic' 'claude' 'justify' '1860s' 'roastbusters' 'trucked' 'craves'\n",
            " 'lepofsky' 'commonplace' 'mobilised' 'quantities' 'mangere' '15-24'\n",
            " 'commercial-grade' 'mana' '\"their' 'live-streamed' 'intimacy' 'hone'\n",
            " 'harawira' 'mirth' 'mum-of-four' '35.7' 'nita' 'shacked' 'sevens' 'posh'\n",
            " 'penelope' 'wilton' 'mckinney' 'mapper' '35-44' 'show-offy'\n",
            " 'multi-agency' 'turgenev' 'dessaix' 'sculls' 'stevenson' 'macfarlane'\n",
            " '290,000' 'deducted' 'hire/fire' 'miguel' 'deduct' 'andujar' 'ocp' 'diva'\n",
            " 'viardot' 'anheuser-busch' 'concerts' 'boone' 'dh' 'budweiser' 'kai']\n",
            "gh: ['enditem\"' 'nketsiah' 'bigging' 'mignolet' 'uprising' 'gk' 'assad'\n",
            " 'enditem' 'crave' 'characteristics' 'damascus' 'uninjured' 'weibo' 'meto'\n",
            " 'centenarians' 'prophetic' 'daboussi' 'jew' 'despoil' 'centred-advocacy'\n",
            " 'denude' 'sanders' 'hierro' 'preposterous' 'birmingham' 'koke'\n",
            " 'goalkeepers' 'saul' 'weapons-usable' 'plutonium' 'already-eliminated'\n",
            " 'peacekeepers' 'poppies' 'vazquez' 'alcantara' 'thiago' 'asensio'\n",
            " 'ashgold' 'attire' 'ebusua' 'mid-table' 'xuhui' 'zhu' 'ap/matt' 'marisa'\n",
            " '37,500' 'fabin' 'inevitability' 'reintegration' '\"ismail' 'bapula'\n",
            " 'mahamat' 'minusma' 'issf' 'roaming' 'ameliorate' 'hardware' 'oriented'\n",
            " 'fraternal' 'greetings' 'ecd' 'gbc' 'equity-based' 'saleh' '8,078' 'nrk'\n",
            " 'sissala' 'fanti' 'twi' 'algerian' 'exhibited' 'marseille-born' 'hausa'\n",
            " 'twinkle' 'prudence' 'zongo' '90-day' 'flag-waving' 'dradozi' 'wikipedia'\n",
            " 'solo-in' 'mavis' 'abo' '\"read' 'yaound' 'aysdgt' 'kwaebibirim'\n",
            " 'impeding' 'kade' 'adankrono' 'doorsteps' 'parameters' 'resides'\n",
            " 'bab-el-mandeb' 'illustration' 'nurtures' 'incompetence' 'annadif'\n",
            " 'adversities' 'kwesi']\n",
            "tz: ['unpleasant' 'kilimanjaro' 'erect' 'kigwe' 'antoine' 'sh1.7bn'\n",
            " 'councilor' 'paschal' 'kraybill' '4,909' 'muamba' 'ifakara' 'sijila'\n",
            " 'precipitation' 'simbakalia' 'india-based' 'mdachi' 'deschamps' '50-50'\n",
            " 'lament' 'induced' 'didier' 'kicheba' 'paralegals' 'measurable'\n",
            " 'discriminations' 'interpol' 'rc' 'msangi' 'cooperating' 'wowap'\n",
            " 'vigilantly' 'demolition' 'exiles' 'dispensaries' 'mpapa' '4,5000'\n",
            " 'encroaching' 'amref' 'shamsi' 'vuai' 'nahodha' 'disbursing' 'ruanda'\n",
            " 'tutsi' 'deluge' 'lituhi' 'kilombero' 'gust' 'disagreeing' '4,258'\n",
            " 'vision-challenged' 'preparations' 'hai' 'tasaf' 'perreira' 'saumu'\n",
            " 'daffa' 'mburahati' 'cuf' '1,162,981,180.81/-' 'nhc' 'under-five' 'notch'\n",
            " 'shambwe' 'arraigned' '437' 'pounded' 'undertakings' 'sella' '97' 'konde'\n",
            " 'uti' 'ahly' 'cashewnut' 'mdgs' 'attain' 'katundua' 'rebranding' 'tnrf'\n",
            " 'tokomeza' 'rpc' 'godfrey' 'massay' 'kenyela' 'postnatal' 'amon'\n",
            " 'mkuranga' 'masele' '6,469,876' 'esther' 'kimbunga' '\"also' 'mpanju'\n",
            " '577,148,886.36/-' 'timeline' 'gairo' '10,045' 'mwenitumba' 'yohana']\n",
            "au: ['zhou' 'quizzed' 'us-led' 'alert\"' 'british-born' 'barbed' 'injecting'\n",
            " 'maker' 'kings' 'charity-founder' 'second-biggest' 'ink' 'xiaochuan'\n",
            " 'augmenting' 'lethal' 'leverage' 'disseminated' 'evilord' 'sleeve'\n",
            " 'humbleness' 'frombreaking' 'bioterror' 'amoruso' 'gal' '#girlboss'\n",
            " 'haemorrhaging' 'tasmanian' 'sprints' 'startlist' 'fellowship' 'parsing'\n",
            " 'kakadu' 'hilarity' 'underage' 'seedy' 'disablement' 'tpd' 'mid-priced'\n",
            " 'indexation' '550' 'byron' 'disliked' 'patu' '10-20-50,000' '@vilhenap'\n",
            " 'quarter-century' 'keating' 'roto' 'centrality' \"o'porter\" 'ekso' 'sorbo'\n",
            " 'thebarton' 'adelaide' '\"ecopost' 'beverage' 'righting' 'load' '$4'\n",
            " 'doodle' 'korematsu' 'dreamer' 'abacha' 'wheaty' 'ruler' 'sani'\n",
            " 'woolloomooloo' 'ranch' 'fiancee' 'daugherty' 'deb' 'hacc'\n",
            " 'argumentation' '01' 'messenger' 'eleanor' 'haemorrhage' 'rendall'\n",
            " 'rutto' 'kayaking' 'diving' 'expressive' 'uppity' 'scuba' '60-year-old'\n",
            " 'toss' 'censored' 'shire' 'second-wave' 'incensed' 'trotty' 'tanqueray'\n",
            " 'dastardly' 'grapefruit' 'lime' 'sonya' 'afterwards' 'doled' 'wheatsheaf'\n",
            " 'listing']\n",
            "za: ['kasongo' 'expropriation' 'dionne' 'loudspeaker' 'gracefully' 'yeoville'\n",
            " 'nia' 'larenz' 'federalism' 'diarrhoeal' 'mabizela' 'rhodes' 'existent'\n",
            " 'farris' '\"jerschow' 'okapi' 'mbalula' 'lieutenant-general' 'lesetja'\n",
            " 'mothiba' 'zambian' 'assert' 'indaba' 'kaldine' 'artisanal' 'stormers'\n",
            " 'neutrality' 'reformation' 'blessee' 'withdrew' 'state-subsidised'\n",
            " 'luthuli' 'melting' 'tambo' '5am' 'fleck' 'argentine' 'dube' 'infringed'\n",
            " 'jumping-off' 'powerlessness' 'numbered' 'allocating' 'queuing'\n",
            " 'aldborough' 'madamanoir.com' 'jika' 'soundtrack' 'lauryn' 'sweetest'\n",
            " 'fuss' 'teh' 'skoene' 'sonder' 'afrikaans' 'amalgamation' 'rustenburg'\n",
            " 'pond' 'chantolive' 'amsterdam' 'ajax' 'ridgewood' 'queues'\n",
            " 'poenskoppies' 'veen' 'dutchman' 'undercutting' 'understatement'\n",
            " 'multibillion-rand' 'mol' 'coped' 'berry' 'rudimentary' 'tip-off'\n",
            " 'nkambule' 'ert' 'eldorado' 'trickle-down' 'ranges' 'interdicted'\n",
            " 'byproduct' 'periphery' 'jerseys' 'townships' 'patriarchy' 'lgbtiq'\n",
            " 'idiocy' 'reachable' 'mouzalas' 'ioannis' 'mahlanza' 'context-specific'\n",
            " 'contextually' 'nkandla' 'thessaloniki' 'al-adha' 'rnc' 'nikoloas'\n",
            " 'giakoumidis' 'colluded']\n",
            "us: ['tulip' 'preacher' 'greene' 'rogen' 'non-white' 'ruth' 'negga' 'jesse'\n",
            " 'hellhound' 'litigator' 'blonde-on-the-page' 'perino' 'siegel' 'mills'\n",
            " 'citibank' 'current-day' 'charley' 'multimillionaire' 'grilled' 'ten-day'\n",
            " 'wrongdoings' 're-writing' 'kurt' 'waterboarding' 'middle-' 'schorr'\n",
            " 'anupong' 'scoop' '$5' 'fantastical' 're-election' 'libel' 'bargaining'\n",
            " 'seize' 'slapping' '1916' 'u.s.-thailand' 'bronx' 'tossed'\n",
            " 'disabled.reply' 'zeigler' 'willfully' 'co-author' 'camarota' 'majesty'\n",
            " 'bhumibol' 'adulyadej' 'belorussian' 'reinstate' 'spoiler' 'normalized'\n",
            " '\"q' 'wordpress' 'upright' 'cross-site' 'scripting' 'humanoid'\n",
            " 'life-sustaining' 'pets' 'softly' 'weigh' '\"paro' 'hoax' '12.6%' 'unseen'\n",
            " 'surfaces' 'insidious' 'photoshopping' 'pornography' 'symbolized'\n",
            " 'ecclesial' 'monroe' 'sams' 'rebelling' 'nine-day' 'mulls' 'goukon'\n",
            " 'banal' '#shoutyourabortion' 'goudo' 'konpa' 'amicus' 'scales' 'haul'\n",
            " 'goldrick-rab' 'harnessing' 'shutter' 'hmong' 'droves' 'ge' 'obey'\n",
            " 'sidewalk' 'mavni' 'bayshore' 'ivf' 'cycles' '24.3%' 'bicyclists' '12.8%'\n",
            " 'complainers']\n",
            "in: ['speciality' 'mha' 'kvk' 'wokha' 'utilization' 'nylon' 'sigtia' 'sunita'\n",
            " 'cum' 'chimed' 'dhoni' 'rampaging' 'h1-b' 'absorbent' 'khetarpal'\n",
            " 'hassle' 'theoretical' 'a/w' 'downloading' 'ids' 'glitzy' 'glamorous'\n",
            " 'torrent' 'sneaker' 'sure-shot' 'delineates' 'creator' 'phantom'\n",
            " 'homework' 'distinctions' 'pulses' 'ply' 'harp' 'auto' 'truthfully'\n",
            " 'bodoland' 'chattopadhyay' 'btad' 'abha' 'tara' 'ed-vantage'\n",
            " 'thiruvananthapuram' 'sbi' 'iaf' '35-40' '\"state' 'war-footing' 'nominal'\n",
            " 'eased' 'desktop' 'meenakshi' '\"tewari' 'dhoni/kohli' 'jayaprakash' 'wi'\n",
            " '@ohhhhmattymatty' 'prolific' 'hailstones' '\"dharampur' 'pgi' 'check-up'\n",
            " 'zaheer' 'sms' '@pressan' 'amritsar' '\"pm' 'gout' 'penguin' 'antwerp'\n",
            " 'interiors' 'rainier' 'wetter' 'climate-changed' 'creations' 'willem'\n",
            " 'wozniacki' 'satyendra' 'garg' 'brus' 'raf' 'authorisation' 'adidas' '79'\n",
            " 'banksy' 'h-1b' 'u.k.' 'caroline' 'k.g.' 'uday' 'reddy' 'rogers'\n",
            " 'leprosy-affected' 'monologue' 'yupptv' 'damp' 'tehreek-e-taliban' 'ttp'\n",
            " 'haqqani' 'melt' 'appeased']\n",
            "ke: ['garaufis' 'edrisa' 'instructor' 'omondi' 'wanjohi' 'insinuations'\n",
            " 'kinda' 'reclaimed' 'kasarani' 'gymnasium' 'photo/sportpicha' 'mwanda'\n",
            " 'papilloma' 'musuuza' 'untold' 'circumcision' 'ultimatum' 'mashinani'\n",
            " 'ruto' 'karumi' 'outha' 'handwalla' 'bwana' 'sounders' 'hubbard' 'bechir'\n",
            " 'esekon' 'aki' 'bumula' 'bungoma' 'kakuma-based' 'reciprocal'\n",
            " 'disinclined' 'moolah' 'wamalwa' 'anti-men' 'fallacy' 'chiraz'\n",
            " 'indignity' 'undeserving' 'mimi' 'napenda' 'maua' 'cuddling' 'mushy'\n",
            " 'coded' 'descendant' 'hospitalized' 'kenzo' 'alias' 'peep' 'destitution'\n",
            " 'libido' 'zacks' 'downwards' 'bebe' 'enhancement' 'moda' 'bbsp' 'skirts'\n",
            " 'mwingi' 'gunshot' 'activewear' 'agrarian' 'handbags' 'merchandise'\n",
            " 'constituting' '191,436' 'tuju' 'rescuebnb' 'annoying' 'ski' 'flourished'\n",
            " 'profiting' 'bothina' 'riek' 'kiwete' 'chura' 'frog' 'multibillion-euro'\n",
            " 'ears' 'emptying' '12,360' '13,026' 'stima' 'low-interest' 'kura'\n",
            " 'qualifiers' 'machar' 'gatdet' 'mwaniki' 'dak' 'kithinji' 'defiantly'\n",
            " 'kiragu' 'state-sponsored' 'kcse' 'menstruating' 'wicked'\n",
            " 'representations']\n",
            "ph: ['warzones' 'jockey' 'chiller' 'subdivision' 'iloilo' 'navidad/iom'\n",
            " 'visayas' \"b'laan\" 'ambushed' 'conrad' 'megaworld' 'fueled' '89.9'\n",
            " 'uproots' 'awad' 'contraction' 'heaven' 'full-blooded' 'tatay'\n",
            " 'depravity' 'humiliated' 'harking' 'life-work' 'hauled' 'befell'\n",
            " 'pitchford' 'samir' 'ascendant' 'suarez' 'princesa' 'arroyo' 'shabu'\n",
            " 'billion-peso' 'to\"' 'erbil' 'ejks' 'calamity-proof' 'disapproval'\n",
            " 'bristles' 'p10,000' 'ouster' 'labor-sending' 'infantile' 'keiji'\n",
            " 'inafune' 'revgov' 'premartial' 'fisherfolk' 'alarms' 'ridicule'\n",
            " 'russians' 'tbfi' '\"sample' 'archrival' 'photo/themba' 'iro'\n",
            " 'montagnards' 'maquiling' 'full-fledged' 'babaero' '\"carlos'\n",
            " 'franciscomanatad' 'editing' 'elpidio' 'womanizer' 'para-athlete' 'randy'\n",
            " 'blossoming' '\"soler' 'kians' 'skied' 'foe' 'siya' 'deceive' 'ang'\n",
            " 'beverly' 'poe' 'gugu' 'lahar-filled' '\"castillo' 'thrilled' 'nears' 'yg'\n",
            " 'peddled' 'mashhoun' 'mahmoud' 'landmarks' 'wording' '90210' 'perils'\n",
            " 'asian-made' 'tad' 'granular' 'reassuring' 'hadebe' 'hinterlands' 'reits'\n",
            " 'lumad' 'quirino' 'davao']\n",
            "bd: ['rajshahi' 'bhuapur' '\"golden' 'spontaneous' '$48' 'daylong' 'phobia'\n",
            " 'exam' 'non-violent' 'ego-' 'khamar' 'ekti' 'underfed' 'tangail' 'jui'\n",
            " 'fdc' 'kendra' 'salish' 'ain' '826.12' 'tk' 'ecnec' 'absar' 'reyhanli'\n",
            " 'ihh' 'patiently' 'hogged' 'user-friendly' 'hinder' 'e-cards.' 'smuggles'\n",
            " 'coyote' 'ergon' 'cocoon' 'bb' 'greenback' 'homesick' 'wreath'\n",
            " 'fukushima' 'hossain' 'martyrs' 'savar' 'sichuan' 'xijie' 'rohingays'\n",
            " 'fortresses' 'three-storey' 'tk.100' 'bangali' 'dubs' '\"meher' 'dol'\n",
            " 'allahr' 'jamaat' 'interrogation' 'termites' 'statelessness'\n",
            " 'difficult-to-reach' 'trickling' 'alicia' 'rainforest' 'chumki' 'afroj'\n",
            " '178' 'times\"' 'hyang' '\"lee' 'loren' 'mcallen' '\"undocumented' 'solvent'\n",
            " 'bikram' 'gunday' 'ap/unb' 'envoys' 'fide' 'decontaminate' '138,000'\n",
            " 'bcs' '56%' 'non-formal' 'stall' 'demolitions' 'halved' '4-5'\n",
            " 'patuakhali' 'chars' 'natore' 'bona' 'bandarban' 'southeastern' 'hasten'\n",
            " 'kathmandu' 'pete' 'santhals' 'parishad' 'shakil' 'quantum' 'nsussc'\n",
            " 'windies']\n",
            "gb: ['faulty' 'adventurer' 'dynamite' 'charging' 'arabic' 'baroudeur'\n",
            " 'peloton' 'speeding' 'underdogs' 'plucky' 'cowell' 'barton-based'\n",
            " 'oxfordshire' 'denise' 'cps' 'videolink' 'craziest' 'stock-market'\n",
            " 'bubbles' 'homo' 'economicus' 'far-fetched' 'ivory-tower'\n",
            " 'rational-expectations' 'subjective' 'shabby' 'seawall' 'whistleblowers'\n",
            " 'theses' 'sthlm' 'caddies' 'gear' 'creases' 'cleanness' 'unaffordability'\n",
            " '\"desmond' 'dictator' 'glaringly' 'dyker' 'remodel' 'wears' 'grimly'\n",
            " 'repel' 'evgeniou' '\"sophia' 'lv' 'prasad' 'lvpei' 'socialist'\n",
            " '\"organisers' 'portions' 'karaokeish' 'have-a-go' 'rapping'\n",
            " 'bandwagon-jumping' 'adapted' 'precepts' 'junk' 'supplier' 'strangling'\n",
            " 'usda' 'forgers' 'go-to' 'dreamy' '17-nation' 'bailouts' 'hamelin' 'pied'\n",
            " 'piper' 'ebony' 'gnaw' 'cable' 'willis' 'hank' '*in' 'kilroy-silk' 'ladd'\n",
            " 'upbeat' 'lobster' '\"owsiak' '\"stewart' 'befriended' '3.3' 'love-bombing'\n",
            " 'mediated' '\"tanned' 'chat-show' 'drohan' 'mep' 'nutters' 'vanity'\n",
            " 'veritas' 'rapture' 'lily-livered' 'opportunism' 'blondie' 'flattering'\n",
            " 'fab' 'freddy' 'takings']\n"
          ]
        }
      ],
      "source": [
        "result = calculate_country_pmi(negdf)\n",
        "for country in countries:\n",
        "  pmis, words = result[country]\n",
        "  values, indices = torch.topk(torch.Tensor(pmis), 100)\n",
        "  print(f\"{country}: {np.array(words)[indices]}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "Cmfr3INxMHQl"
      },
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "name": "data_analysis.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
